/ Hex Artifact Content
Login

Artifact 13194e2961ab92ec42016f05797f02a898d06729:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 32 32 20 32 30 30 39  e.c,v 1.822 2009
0850: 2f 30 32 2f 32 34 20 31 30 3a 30 31 3a 35 32 20  /02/24 10:01:52 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 65 73 74 20 61 20 72 65 67 69 73 74 65  * Test a registe
0f60: 72 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 65  r to see if it e
0f70: 78 63 65 65 64 73 20 74 68 65 20 63 75 72 72 65  xceeds the curre
0f80: 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62 20  nt maximum blob 
0f90: 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74 20 64  size..** If it d
0fa0: 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  oes, record the 
0fb0: 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62  new maximum blob
0fc0: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   size..*/.#if de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
0fe0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
0ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1000: 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  IN_TEST).# defin
1010: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
1020: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
1030: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
1040: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
1050: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1060: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1070: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1080: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1090: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
10a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
10b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
10c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
10d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
10e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
10f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1100: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1110: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1120: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1130: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1140: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1150: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1170: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1180: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1190: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
11a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
11b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
11c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
11d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
11e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
11f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1200: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1210: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1220: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1230: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1240: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1250: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1260: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1270: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1280: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1290: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
12a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
12b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
12d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
12e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
12f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1300: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1310: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1320: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1330: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1340: 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20 73  nto an MEM_Dyn s
1350: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
1360: 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  e Deephemeralize
1370: 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50  (P) \.   if( ((P
1380: 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68  )->flags&MEM_Eph
1390: 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20  em)!=0 \.       
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50  mMakeWriteable(P
13c0: 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ) ){ goto no_mem
13d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73  ;}../*.** Call s
13e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
13f0: 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68 65  andBlob() on the
1400: 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65 20   supplied value 
1410: 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50  (type Mem*).** P
1420: 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   if required..*/
1430: 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42  .#define ExpandB
1440: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
1450: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
1460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
1470: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a  ndBlob(P):0)../*
1480: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1490: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65  m points at a re
14a0: 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c  gister that will
14b0: 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a   be passed to a.
14c0: 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ** user-defined 
14d0: 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75  function or retu
14e0: 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
14f0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f   as the result o
1500: 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68  f a query..** Th
1510: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1520: 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20 74  t, 'db_enc' is t
1530: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1540: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64 62   used by the vdb
1550: 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74 65  e for.** registe
1560: 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  r variables.  Th
1570: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1580: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1590: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
15a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
15b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
15c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
15d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
15e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
15f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1600: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1610: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1620: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1630: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1640: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1650: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1660: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1670: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1680: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
16a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
16b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
16c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
16e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
16f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1700: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1720: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1730: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1750: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1760: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1770: 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73 20  *.** Properties 
1780: 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  of opcodes.  The
1790: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
17a0: 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63  ER macro is.** c
17b0: 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f  reated by mkopco
17c0: 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20 63  deh.awk during c
17d0: 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74  ompilation.  Dat
17e0: 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  a is obtained.**
17f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e   from the commen
1800: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1810: 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a 22   "case OP_xxxx:"
1820: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a   statements in.*
1830: 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a  * this file.  .*
1840: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  /.static const u
1850: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 70 63  nsigned char opc
1860: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20  odeProperty[] = 
1870: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
1880: 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  R;../*.** Return
1890: 20 74 72 75 65 20 69 66 20 61 6e 20 6f 70 63 6f   true if an opco
18a0: 64 65 20 68 61 73 20 61 6e 79 20 6f 66 20 74 68  de has any of th
18b0: 65 20 4f 50 46 4c 47 5f 78 78 78 20 70 72 6f 70  e OPFLG_xxx prop
18c0: 65 72 74 69 65 73 0a 2a 2a 20 73 70 65 63 69 66  erties.** specif
18d0: 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a  ied by mask..*/.
18e0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4f  int sqlite3VdbeO
18f0: 70 63 6f 64 65 48 61 73 50 72 6f 70 65 72 74 79  pcodeHasProperty
1900: 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74  (int opcode, int
1910: 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73 65 72 74   mask){.  assert
1920: 28 20 6f 70 63 6f 64 65 3e 30 20 26 26 20 6f 70  ( opcode>0 && op
1930: 63 6f 64 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66  code<(int)sizeof
1940: 28 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29  (opcodeProperty)
1950: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70   );.  return (op
1960: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63  codeProperty[opc
1970: 6f 64 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d  ode]&mask)!=0;.}
1980: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1990: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
19a0: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
19b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
19c0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
19d0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
19e0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
19f0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1a00: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1a10: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a30: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1a40: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a60: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1a70: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1a80: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1a90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1ab0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1ac0: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
1ae0: 6e 20 64 61 74 61 62 61 73 65 20 74 68 65 20 63  n database the c
1af0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1b00: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74  , or -1 */.  int
1b10: 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 20   isBtreeCursor  
1b20: 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a 20 20 2f 2a     /* */.){.  /*
1b30: 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79   Find the memory
1b40: 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20   cell that will 
1b50: 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  be used to store
1b60: 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d   the blob of mem
1b70: 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65  ory.  ** require
1b80: 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65 43  d for this VdbeC
1b90: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e  ursor structure.
1ba0: 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e   It is convenien
1bb0: 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a  t to use a .  **
1bc0: 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c   vdbe memory cel
1bd0: 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20  l to manage the 
1be0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1bf0: 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 61  n required for a
1c00: 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
1c10: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
1c20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61  he following rea
1c30: 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  sons:.  **.  ** 
1c40: 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75    * Sometimes cu
1c50: 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65  rsor numbers are
1c60: 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70   used for a coup
1c70: 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a  le of different.
1c80: 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65    **     purpose
1c90: 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67  s in a vdbe prog
1ca0: 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65  ram. The differe
1cb0: 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72 65  nt uses might re
1cc0: 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64  quire.  **     d
1cd0: 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61  ifferent sized a
1ce0: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f  llocations. Memo
1cf0: 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65  ry cells provide
1d00: 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20   growable.  **  
1d10: 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a     allocations..
1d20: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68    **.  **   * Wh
1d30: 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f  en using ENABLE_
1d40: 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
1d50: 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62  T, memory cell b
1d60: 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20  uffers can.  ** 
1d70: 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a      be freed laz
1d80: 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c 69  ily via the sqli
1d90: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
1da0: 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20  ry() API. This. 
1db0: 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65   **     minimize
1dc0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1dd0: 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64  malloc calls mad
1de0: 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  e by the system.
1df0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72  .  **.  ** Memor
1e00: 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73  y cells for curs
1e10: 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  ors are allocate
1e20: 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  d at the top of 
1e30: 74 68 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a  the address.  **
1e40: 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63   space. Memory c
1e50: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f  ell (p->nMem) co
1e60: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72  rresponds to cur
1e70: 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72  sor 0. Space for
1e80: 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69  .  ** cursor 1 i
1e90: 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d  s managed by mem
1ea0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1eb0: 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a  m-1), etc..  */.
1ec0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70    Mem *pMem = &p
1ed0: 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69  ->aMem[p->nMem-i
1ee0: 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79  Cur];..  int nBy
1ef0: 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  te;.  VdbeCursor
1f00: 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79   *pCx = 0;.  nBy
1f10: 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65  te = .      size
1f20: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b  of(VdbeCursor) +
1f30: 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65   .      (isBtree
1f40: 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74  Cursor?sqlite3Bt
1f50: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a  reeCursorSize():
1f60: 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46  0) + .      2*nF
1f70: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  r<p->nCursor );.
1fa0: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
1fb0: 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  Cur] ){.    sqli
1fc0: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1fd0: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
1fe0: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
1ff0: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2000: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2010: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2020: 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74  mGrow(pMem, nByt
2030: 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e  e, 0) ){.    p->
2040: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2050: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2060: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2070: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
2080: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78   nByte);.    pCx
2090: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
20a0: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
20b0: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e  Field;.    if( n
20c0: 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70  Field ){.      p
20d0: 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32  Cx->aType = (u32
20e0: 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65   *)&pMem->z[size
20f0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b  of(VdbeCursor)];
2100: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
2110: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2120: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2130: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2140: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2150: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
2160: 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a  ursor)+2*nField*
2170: 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20  sizeof(u32)];.  
2180: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2190: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
21a0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
21b0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
21c0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
21d0: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
21e0: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
21f0: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2200: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2210: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2220: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2230: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2240: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2250: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
2260: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
2270: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
2280: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73  e it alone..*/.s
2290: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
22a0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
22b0: 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66  Mem *pRec){.  if
22c0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
22d0: 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49   (MEM_Real|MEM_I
22e0: 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt))==0 ){.    i
22f0: 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20  nt realnum;.    
2300: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2310: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2320: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2330: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a  >flags&MEM_Str).
2340: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
2350: 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63  te3IsNumber(pRec
2360: 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70  ->z, &realnum, p
2370: 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20  Rec->enc) ){.   
2380: 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20     i64 value;.  
2390: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
23a0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52  hangeEncoding(pR
23b0: 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  ec, SQLITE_UTF8)
23c0: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61  ;.      if( !rea
23d0: 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41  lnum && sqlite3A
23e0: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
23f0: 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20  value) ){.      
2400: 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61    pRec->u.i = va
2410: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lue;.        Mem
2420: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2430: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
2440: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2450: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2460: 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20  ealify(pRec);.  
2470: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2480: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
2490: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
24a0: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
24b0: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
24c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
24d0: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
24e0: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
24f0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2500: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2510: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2520: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2530: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2540: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2550: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2560: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2570: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2580: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
2590: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
25a0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
25b0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
25c0: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
25d0: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
25e0: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
25f0: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2600: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2610: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2620: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2630: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2640: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2650: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2660: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2670: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2680: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
2690: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
26a0: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
26b0: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
26c0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
26d0: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
26e0: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
26f0: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2700: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2710: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2720: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2730: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2740: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2750: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2760: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2770: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2780: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
2790: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
27a0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
27b0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
27c0: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
27d0: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
27e0: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
27f0: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2800: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2810: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2820: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2830: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2840: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2850: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
2860: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2870: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
2880: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
2890: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
28a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
28c0: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
28d0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
28e0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
28f0: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
2900: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
2910: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
2920: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
2930: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
2940: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
2950: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2960: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2970: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2980: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2990: 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  );.    applyNume
29a0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
29b0: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
29c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
29d0: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
29e0: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
29f0: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2a00: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2a10: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
2a20: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
2a30: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
2a40: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2a50: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2a60: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2a70: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2a80: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2a90: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2aa0: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2ab0: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2ac0: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2ad0: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2ae0: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2af0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
2b00: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
2b10: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
2b20: 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ument..**.** Thi
2b30: 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45  s is an EXPERIME
2b40: 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20  NTAL api and is 
2b50: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
2b60: 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f  e or removal..*/
2b70: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2b80: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2b90: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2ba0: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  Val){.  Mem *pMe
2bb0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2bc0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2bd0: 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20  finity(pMem);.  
2be0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d  storeTypeInfo(pM
2bf0: 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  em, 0);.  return
2c00: 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a   pMem->type;.}..
2c10: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2c20: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2c30: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2c40: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2c50: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2c60: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2c70: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2c80: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2c90: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2ca0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2cb0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2cc0: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2cd0: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2ce0: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2cf0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2d00: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2d10: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2d20: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2d30: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2d40: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2d50: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2d60: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2d70: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2d80: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2d90: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2da0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2db0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2dc0: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2dd0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2de0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2df0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2e00: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2e10: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2e20: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2e30: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2e40: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2e50: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2e60: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2e70: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2e80: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2e90: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2ea0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2eb0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2ec0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
2ed0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
2ee0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
2ef0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
2f00: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2f10: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2f20: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
2f30: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
2f40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2f50: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2f60: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2f70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f80: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
2f90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2fa0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2fb0: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
2fc0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
2fd0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
2fe0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2ff0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3000: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
3010: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3020: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3030: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3040: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3050: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
3060: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3070: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
3080: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
3090: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
30a0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
30b0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
30c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
30d0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
30e0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
30f0: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
3100: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
3110: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
3120: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
3130: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
3140: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
3150: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3160: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3170: 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73   "]%s", encnames
3180: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3190: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
31a0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
31b0: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
31c0: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
31d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31e0: 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22  100, zCsr,"+%dz"
31f0: 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  ,pMem->u.nZero);
3200: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3210: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3220: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3230: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
3240: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3250: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74  M_Str ){.    int
3260: 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b   j, k;.    zBuf[
3270: 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66  0] = ' ';.    if
3280: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
3290: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
32a0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
32b0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
32c0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
32d0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
32e0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
32f0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  tic ){.      zBu
3300: 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20  f[1] = 't';.    
3310: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3320: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3330: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3340: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3350: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a  Ephem ){.      z
3360: 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20  Buf[1] = 'e';.  
3370: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3380: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3390: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
33a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42   }else{.      zB
33b0: 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20  uf[1] = 's';.   
33c0: 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20   }.    k = 2;.  
33d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
33e0: 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d  tf(100, &zBuf[k]
33f0: 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29  , "%d", pMem->n)
3400: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3410: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3420: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3430: 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66  ++] = '[';.    f
3440: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20  or(j=0; j<15 && 
3450: 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b  j<pMem->n; j++){
3460: 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d  .      u8 c = pM
3470: 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20  em->z[j];.      
3480: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63  if( c>=0x20 && c
3490: 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20  <0x7f ){.       
34a0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a   zBuf[k++] = c;.
34b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
34c0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
34d0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20   '.';.      }.  
34e0: 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b    }.    zBuf[k++
34f0: 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c  ] = ']';.    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e  0,&zBuf[k], encn
3520: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3530: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3540: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3550: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3560: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23  ++] = 0;.  }.}.#
3570: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3580: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3590: 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65   Print the value
35a0: 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66   of a register f
35b0: 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f  or tracing purpo
35c0: 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ses:.*/.static v
35d0: 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  oid memTracePrin
35e0: 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d  t(FILE *out, Mem
35f0: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66   *p){.  if( p->f
3600: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3610: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3620: 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  ut, " NULL");.  
3630: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
3640: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3650: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
3660: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
3670: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3680: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
3690: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
36a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
36b0: 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  Int ){.    fprin
36c0: 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64  tf(out, " i:%lld
36d0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
36e0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
36f0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3700: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3710: 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a  " r:%g", p->r);.
3720: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61    }else{.    cha
3730: 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20  r zBuf[200];.   
3740: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
3750: 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42  rettyPrint(p, zB
3760: 75 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66  uf);.    fprintf
3770: 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20  (out, " ");.    
3780: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  fprintf(out, "%s
3790: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
37a0: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
37b0: 73 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a  sterTrace(FILE *
37c0: 6f 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d  out, int iReg, M
37d0: 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74  em *p){.  fprint
37e0: 66 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20  f(out, "REG[%d] 
37f0: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3800: 6d 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c  mTracePrint(out,
3810: 20 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f   p);.  fprintf(o
3820: 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ut, "\n");.}.#en
3830: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3840: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3850: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3860: 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61  E(R,M) if(p->tra
3870: 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65  ce)registerTrace
3880: 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23  (p->trace,R,M).#
3890: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52  else.#  define R
38a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
38b0: 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64  M).#endif...#ifd
38c0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
38d0: 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68  ./* .** hwtime.h
38e0: 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65   contains inline
38f0: 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20   assembler code 
3900: 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  for implementing
3910: 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72   .** high-perfor
3920: 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75  mance timing rou
3930: 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  tines..*/.#inclu
3940: 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23  de "hwtime.h"..#
3950: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3960: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
3970: 52 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e  RUPT macro defin
3980: 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f  ed here looks to
3990: 20 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73   see if the.** s
39a0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
39b0: 28 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62  () routine has b
39c0: 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20  een called.  If 
39d0: 69 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65  it has been, the
39e0: 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20  n.** processing 
39f0: 6f 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  of the VDBE prog
3a00: 72 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74  ram is interrupt
3a10: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d  ed..**.** This m
3a20: 61 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76  acro added to ev
3a30: 65 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ery instruction 
3a40: 74 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70  that does a jump
3a50: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
3a60: 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70  implement a loop
3a70: 2e 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65  .  This test use
3a80: 64 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79  d to be on every
3a90: 20 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74   single instruct
3aa0: 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74  ion,.** but that
3ab0: 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74   meant we more t
3ac0: 65 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e  esting that we n
3ad0: 65 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20  eeded.  By only 
3ae0: 74 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66  testing the.** f
3af0: 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74  lag on jump inst
3b00: 72 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74  ructions, we get
3b10: 20 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64   a (small) speed
3b20: 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f   improvement..*/
3b30: 0a 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46  .#define CHECK_F
3b40: 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20  OR_INTERRUPT \. 
3b50: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
3b60: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
3b70: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
3b80: 6e 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65  nterrupt;..#ifde
3b90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73  f SQLITE_DEBUG.s
3ba0: 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78  tatic int fileEx
3bb0: 69 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62  ists(sqlite3 *db
3bc0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
3bd0: 69 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20  ile){.  int res 
3be0: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  = 0;.  int rc = 
3bf0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65  SQLITE_OK;.#ifde
3c00: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
3c10: 2f 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72  /* If we are cur
3c20: 72 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49  rently testing I
3c30: 4f 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64  O errors, then d
3c40: 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63  o not call OsAcc
3c50: 65 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65  ess() to.  ** te
3c60: 73 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65  st for the prese
3c70: 6e 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68  nce of zFile. Th
3c80: 69 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e  is is because an
3c90: 79 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a  y IO error that.
3ca0: 20 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65    ** occurs here
3cb0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70   will not be rep
3cc0: 6f 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74  orted, causing t
3cd0: 68 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e  he test to fail.
3ce0: 0a 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69  .  */.  extern i
3cf0: 6e 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72  nt sqlite3_io_er
3d00: 72 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69  ror_pending;.  i
3d10: 66 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72  f( sqlite3_io_er
3d20: 72 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29  ror_pending<=0 )
3d30: 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d  .#endif.    rc =
3d40: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
3d50: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65  (db->pVfs, zFile
3d60: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
3d70: 45 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20  EXISTS, &res);. 
3d80: 20 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20   return (res && 
3d90: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a  rc==SQLITE_OK);.
3da0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
3db0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
3dc0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
3dd0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
3de0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
3df0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
3e00: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
3e10: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
3e20: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
3e30: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
3e40: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
3e50: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
3e60: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
3e70: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
3e80: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
3e90: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
3ea0: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
3eb0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
3ec0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
3ed0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
3ee0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
3ef0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
3f00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3f10: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
3f20: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
3f30: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
3f40: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
3f50: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
3f60: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
3f70: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
3f80: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
3f90: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
3fa0: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
3fb0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
3fc0: 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75  ** Execute as mu
3fd0: 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f  ch of a VDBE pro
3fe0: 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74  gram as we can t
3ff0: 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a  hen return..**.*
4000: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  * sqlite3VdbeMak
4010: 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65  eReady() must be
4020: 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74   called before t
4030: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  his routine in o
4040: 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65  rder to.** close
4050: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74   the program wit
4060: 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c  h a final OP_Hal
4070: 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20  t and to set up 
4080: 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a  the callbacks.**
4090: 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d   and the error m
40a0: 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a  essage pointer..
40b0: 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61  **.** Whenever a
40c0: 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64   row or result d
40d0: 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
40e0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  , this routine w
40f0: 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e  ill either.** in
4100: 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20  voke the result 
4110: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4120: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65  re is one) or re
4130: 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c  turn with.** SQL
4140: 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49  ITE_ROW..**.** I
4150: 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  f an attempt is 
4160: 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c  made to open a l
4170: 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20  ocked database, 
4180: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
4190: 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72  e.** will either
41a0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79   invoke the busy
41b0: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
41c0: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69  ere is one) or i
41d0: 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e  t will.** return
41e0: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a   SQLITE_BUSY..**
41f0: 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20  .** If an error 
4200: 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72  occurs, an error
4210: 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74   message is writ
4220: 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  ten to memory ob
4230: 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73  tained.** from s
4240: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
4250: 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69  and p->zErrMsg i
4260: 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20  s made to point 
4270: 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a  to that memory..
4280: 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64  ** The error cod
4290: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  e is stored in p
42a0: 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f  ->rc and this ro
42b0: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51  utine returns SQ
42c0: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
42d0: 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63  * If the callbac
42e0: 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e  k ever returns n
42f0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
4300: 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a  e program exits.
4310: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
4320: 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e   There will be n
4330: 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  o error message 
4340: 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69  but the p->rc fi
4350: 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f  eld is.** set to
4360: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e   SQLITE_ABORT an
4370: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  d this routine w
4380: 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ill return SQLIT
4390: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
43a0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
43b0: 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20  on error causes 
43c0: 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20  p->rc to be set 
43d0: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  to SQLITE_NOMEM 
43e0: 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74  and this.** rout
43f0: 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51  ine to return SQ
4400: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4410: 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72  * Other fatal er
4420: 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49  rors return SQLI
4430: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4440: 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69  After this routi
4450: 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  ne has finished,
4460: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
4470: 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65  lize() should be
4480: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61  .** used to clea
4490: 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68  n up the mess th
44a0: 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69  at was left behi
44b0: 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nd..*/.int sqlit
44c0: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
44d0: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
44e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
44f0: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
4500: 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   pc;            
4510: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
4520: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
4530: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4550: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
4560: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
4570: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4580: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4590: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
45a0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
45b0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
45c0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65  tabase */.  u8 e
45d0: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
45e0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
45f0: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4600: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4610: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4620: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
4630: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4640: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
4650: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
4660: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4670: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
4680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
4690: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
46a0: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
46b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46c0: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
46d0: 20 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65   */.  u8 opPrope
46e0: 72 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70  rty;.  int iComp
46f0: 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  are = 0;        
4700: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c    /* Result of l
4710: 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  ast OP_Compare o
4720: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4730: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
4740: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4750: 75 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  uation of column
4760: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
4770: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4780: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4790: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
47a0: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
47b0: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
47c0: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
47d0: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
47e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
47f0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4800: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4810: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
4820: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4830: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4840: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
4850: 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  Ops = 0;      /*
4860: 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65   Opcodes execute
4870: 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73  d since progress
4880: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65   callback. */.#e
4890: 6e 64 69 66 0a 20 20 55 6e 70 61 63 6b 65 64 52  ndif.  UnpackedR
48a0: 65 63 6f 72 64 20 61 54 65 6d 70 52 65 63 5b 31  ecord aTempRec[1
48b0: 36 5d 3b 20 2f 2a 20 53 70 61 63 65 20 74 6f 20  6]; /* Space to 
48c0: 68 6f 6c 64 20 61 20 74 72 61 6e 73 69 65 6e 74  hold a transient
48d0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
48e0: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
48f0: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4900: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4910: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4920: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4930: 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69  assert( db->magi
4940: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
4950: 42 55 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65  BUSY );.  sqlite
4960: 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79  3BtreeMutexArray
4970: 45 6e 74 65 72 28 26 70 2d 3e 61 4d 75 74 65 78  Enter(&p->aMutex
4980: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  );.  if( p->rc==
4990: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
49a0: 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
49b0: 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ens if a malloc(
49c0: 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20  ) inside a call 
49d0: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  to sqlite3_colum
49e0: 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20  n_text() or.    
49f0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ** sqlite3_colum
4a00: 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65  n_text16() faile
4a10: 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  d.  */.    goto 
4a20: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
4a30: 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c  sert( p->rc==SQL
4a40: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
4a50: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4a60: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4a70: 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _OK;.  assert( p
4a80: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
4a90: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
4aa0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4ab0: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4ac0: 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
4ad0: 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74  TERRUPT;.  sqlit
4ae0: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4af0: 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  (p);.#ifdef SQLI
4b00: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4b10: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4b20: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4b30: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4b40: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4b50: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4b60: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
4b70: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
4b80: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
4b90: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4ba0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4bb0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4bc0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4bd0: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4be0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4bf0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4c00: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4c10: 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70  dout, i, &p->aOp
4c20: 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  [i]);.    }.  }.
4c30: 20 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73    if( fileExists
4c40: 28 64 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65  (db, "vdbe_trace
4c50: 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61  ") ){.    p->tra
4c60: 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d  ce = stdout;.  }
4c70: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4c80: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4c90: 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e  dif.  for(pc=p->
4ca0: 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  pc; rc==SQLITE_O
4cb0: 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73  K; pc++){.    as
4cc0: 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70  sert( pc>=0 && p
4cd0: 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20  c<p->nOp );.    
4ce0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
4cf0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
4d00: 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f  em;.#ifdef VDBE_
4d10: 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67  PROFILE.    orig
4d20: 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61  Pc = pc;.    sta
4d30: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4d40: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4d50: 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70   pOp = &p->aOp[p
4d60: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
4d70: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
4d80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
4d90: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
4da0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4db0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
4dc0: 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
4dd0: 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20  if( pc==0 ){.   
4de0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
4df0: 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63  E Execution Trac
4e00: 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  e:\n");.        
4e10: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4e20: 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a  Sql(p);.      }.
4e30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4e40: 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63  ePrintOp(p->trac
4e50: 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20  e, pc, pOp);.   
4e60: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72   }.    if( p->tr
4e70: 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20  ace==0 && pc==0 
4e80: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4e90: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4ea0: 63 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66  c();.      if( f
4eb0: 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76  ileExists(db, "v
4ec0: 64 62 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29  dbe_sqltrace") )
4ed0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4ee0: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4ef0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4f00: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4f10: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a  Malloc();.    }.
4f20: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
4f30: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
4f40: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
4f50: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
4f60: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
4f70: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
4f80: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
4f90: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
4fa0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4fb0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
4fc0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4fd0: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
4fe0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4ff0: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
5000: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
5010: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5020: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
5030: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5040: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
5050: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
5060: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5070: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
5080: 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c  LBACK.    /* Cal
5090: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
50a0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
50b0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
50c0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
50d0: 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44  ber.    ** of VD
50e0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
50f0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5100: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5110: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a  ocation of.    *
5120: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
5130: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
5140: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
5150: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
5160: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a   called)..    **
5170: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
5180: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
5190: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
51a0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
51b0: 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a  hine with.    **
51c0: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
51d0: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20  QLITE_ABORT..   
51e0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
51f0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
5200: 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67     if( db->nProg
5210: 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65  ressOps==nProgre
5220: 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20  ssOps ){.       
5230: 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20   int prc;.      
5240: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5250: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
5260: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
5270: 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70  isuse;.        p
5280: 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73  rc =db->xProgres
5290: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
52a0: 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  rg);.        if(
52b0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
52c0: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
52d0: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
52e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
52f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5300: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5310: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5320: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5330: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5340: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5350: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
5360: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
5370: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
5380: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44  #endif..    /* D
5390: 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70  o common setup p
53a0: 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e  rocessing for an
53b0: 79 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73  y opcode that is
53c0: 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77   marked.    ** w
53d0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
53e0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20  erelease" tag.  
53f0: 53 75 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76  Such opcodes hav
5400: 65 20 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a  e a single.    *
5410: 2a 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69  * output which i
5420: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
5430: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e  he P2 parameter.
5440: 20 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65    The P2 registe
5450: 72 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74  r.    ** is init
5460: 69 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c  ialized to a NUL
5470: 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70  L..    */.    op
5480: 50 72 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64  Property = opcod
5490: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
54a0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20  pcode];.    if( 
54b0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
54c0: 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
54d0: 41 53 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ASE)!=0 ){.     
54e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
54f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5500: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5510: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f  nMem );.      pO
5520: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
5530: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71  p->p2];.      sq
5540: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
5550: 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74  aseExternal(pOut
5560: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
5570: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
5580: 0a 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20  .    }else. .   
5590: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
55a0: 74 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20  tup for opcodes 
55b0: 6d 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20  marked with one 
55c0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
55d0: 0a 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74  .    ** combinat
55e0: 69 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69  ions of properti
55f0: 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  es..    **.    *
5600: 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a  *           in1.
5610: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
5620: 20 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20   in1 in2.    ** 
5630: 20 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e            in1 in
5640: 32 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20  2 out3.    **   
5650: 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a          in1 in3.
5660: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61      **.    ** Va
5670: 72 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49  riables pIn1, pI
5680: 6e 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65  n2, and pIn3 are
5690: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
56a0: 6f 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20  o appropriate.  
56b0: 20 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66    ** registers f
56c0: 6f 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69  or inputs.  Vari
56d0: 61 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73  able pOut points
56e0: 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72   to the output r
56f0: 65 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a  egister..    */.
5700: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5710: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5720: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5730: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
5740: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5750: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
5760: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d   );.      pIn1 =
5770: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5780: 31 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  1];.      REGIST
5790: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
57a0: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69  , pIn1);.      i
57b0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
57c0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
57d0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
57e0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
57f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5800: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5810: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20  );.        pIn2 
5820: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5830: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47  p2];.        REG
5840: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5850: 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  >p2, pIn2);.    
5860: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5870: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
5880: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5890: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
58a0: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20  3>0 );.         
58b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
58c0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
58d0: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70         pOut = &p
58e0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
58f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5900: 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72   }else if( (opPr
5910: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5920: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5930: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5940: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5950: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5960: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5970: 20 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d     pIn3 = &p->aM
5980: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
5990: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
59a0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e  ACE(pOp->p3, pIn
59b0: 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  3);.      }.    
59c0: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
59d0: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
59e0: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
59f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5a00: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5a10: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
5a20: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32  em );.      pIn2
5a30: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5a40: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49  >p2];.      REGI
5a50: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5a60: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  p2, pIn2);.    }
5a70: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5a80: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
5a90: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5aa0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5ab0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5ac0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5ad0: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20  m );.      pIn3 
5ae0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5af0: 70 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p3];.      REGIS
5b00: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5b10: 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a  3, pIn3);.    }.
5b20: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5b30: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5b90: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5ba0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5bb0: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5bc0: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5bd0: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5be0: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5bf0: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5c00: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5c10: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5c20: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5c30: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5c40: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5c50: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5c60: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5c70: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5c80: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5c90: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5ca0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5cb0: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5cc0: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5cd0: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5ce0: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5cf0: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5d00: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5d10: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5d20: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5d30: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5d40: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5d50: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5d60: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5d70: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5d80: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5d90: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5da0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5db0: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5dc0: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5dd0: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5de0: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5df0: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5e00: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5e10: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5e20: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5e30: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5e40: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5e50: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5e60: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5e70: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5e80: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5e90: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5ea0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5eb0: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5ec0: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5ed0: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5ee0: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5ef0: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5f00: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5f10: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5f20: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5f30: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5f40: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5f50: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5f60: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5f70: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5f80: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5f90: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5fa0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5fb0: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5fc0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5fd0: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5fe0: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5ff0: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
6000: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
6010: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
6020: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
6030: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
6040: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
6050: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
6060: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
6070: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
6080: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
6090: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
60a0: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
60b0: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
60c0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
60d0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
60e0: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
60f0: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
6100: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
6110: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
6120: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
6130: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
6140: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
6150: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
6160: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
6170: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
6180: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
6190: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
61a0: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
61b0: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
61c0: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
61d0: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
61e0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
61f0: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
6200: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
6210: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
6220: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
6230: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
6240: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
62a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
62b0: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
62c0: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
62d0: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
62e0: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
62f0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6300: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6310: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6320: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
6330: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
6340: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
6350: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6370: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
6380: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
6390: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
63a0: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
63b0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
63c0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
63d0: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
63e0: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
63f0: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6400: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6410: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6420: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
6430: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6440: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
6450: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
6460: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6470: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
6480: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
6490: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
64a0: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
64b0: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
64c0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
64d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
64e0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
64f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6500: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6510: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6520: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6530: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6540: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6550: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6560: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6570: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6580: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
6590: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
65a0: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
65b0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
65c0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
65d0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63   MEM_Int );.  pc
65e0: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
65f0: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
6600: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
6610: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6620: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
6630: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
6640: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
6650: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
6660: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6670: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6680: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
6690: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
66a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
66b0: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
66c0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
66d0: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
66e0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
66f0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
6700: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6710: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6720: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
6730: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6740: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
6750: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  l  P1 P2 P3 P4 *
6760: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
6770: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6780: 65 72 20 50 33 2e 20 20 49 66 20 69 73 20 69 73  er P3.  If is is
6790: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
67a0: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
67b0: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
67c0: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
67d0: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
67e0: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
67f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6800: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
6810: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
6820: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
6830: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6840: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
6850: 2a 20 69 6e 33 20 2a 2f 0a 20 20 69 66 28 20 28  * in3 */.  if( (
6860: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
6870: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
6880: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
6890: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
68a0: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
68b0: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
68c0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69  * P4 *.**.** Exi
68d0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
68e0: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
68f0: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
6900: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
6910: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
6920: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
6930: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
6940: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
6950: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
6960: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
6970: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
6980: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
6990: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
69a0: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
69b0: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
69c0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
69d0: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
69e0: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
69f0: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
6a00: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
6a10: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
6a20: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
6a30: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
6a40: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
6a50: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
6a60: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
6a70: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
6a80: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
6a90: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
6aa0: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6ab0: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
6ac0: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
6ad0: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
6ae0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
6af0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
6b00: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
6b10: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
6b20: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
6b30: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
6b40: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
6b50: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
6b60: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
6b70: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
6b80: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
6b90: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
6ba0: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
6bb0: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
6bc0: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
6bd0: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
6be0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
6bf0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
6c00: 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20 3d  alt: {.  p->rc =
6c10: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70   pOp->p1;.  p->p
6c20: 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72 72  c = pc;.  p->err
6c30: 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e  orAction = pOp->
6c40: 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  p2;.  if( pOp->p
6c50: 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  4.z ){.    sqlit
6c60: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
6c70: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
6c80: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
6c90: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
6ca0: 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
6cb0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
6cc0: 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53  TE_BUSY || rc==S
6cd0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66  QLITE_OK );.  if
6ce0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
6cf0: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
6d00: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
6d10: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
6d20: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
6d30: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
6d40: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
6d50: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
6d60: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6d70: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
6d80: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d   *.**.** The 32-
6d90: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
6da0: 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20  e P1 is written 
6db0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
6dc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
6dd0: 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  eger: {         
6de0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
6df0: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
6e00: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6e10: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
6e20: 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p1;.  break;.}
6e30: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
6e40: 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  64 * P2 * P4 *.*
6e50: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
6e60: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
6e70: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
6e80: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
6e90: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
6ea0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
6eb0: 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20  _Int64: {       
6ec0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
6ed0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
6ee0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
6ef0: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
6f00: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6f10: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
6f20: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
6f30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6f40: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
6f50: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
6f60: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
6f70: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
6f80: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
6f90: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
6fa0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
6fb0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
6fc0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
6fd0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
6fe0: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
6ff0: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7000: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7010: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
7020: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
7030: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
7040: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
7050: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
7060: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7070: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
7080: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  P4 *.**.** P4 po
7090: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
70a0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
70b0: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
70c0: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
70d0: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50  d .** into an OP
70e0: 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69  _String before i
70f0: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
7100: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
7110: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
7120: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
7130: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
7140: 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65  RING, out2-prere
7150: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7160: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7170: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
7180: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
7190: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
71a0: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
71b0: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
71c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
71d0: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
71e0: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
71f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7200: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7210: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
7220: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
7230: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
7240: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  f( SQLITE_OK!=sq
7250: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
7260: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
7270: 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e  coding) ) goto n
7280: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20 53  o_mem;.    if( S
7290: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
72a0: 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
72b0: 65 61 62 6c 65 28 70 4f 75 74 29 20 29 20 67 6f  eable(pOut) ) go
72c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70  to no_mem;.    p
72d0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
72e0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
72f0: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7300: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7310: 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20   &= ~MEM_Dyn;.  
7320: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
7330: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
7340: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
7350: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
7360: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
7370: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
7380: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
7390: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
73a0: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
73b0: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  pOut->n;.    if(
73c0: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
73d0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
73e0: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
73f0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
7400: 20 20 20 20 7d 0a 20 20 20 20 55 50 44 41 54 45      }.    UPDATE
7410: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7420: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
7430: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
7440: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
7450: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
7460: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
7470: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7480: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
7490: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
74a0: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
74b0: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
74c0: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
74d0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  * P4 *.**.** The
74e0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
74f0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
7500: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
7510: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
7520: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
7530: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
7540: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7550: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7560: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
7570: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7580: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
7590: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
75a0: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
75b0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
75c0: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
75d0: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
75e0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
75f0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
7600: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7610: 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a  e: Null * P2 * *
7620: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61   *.**.** Write a
7630: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
7640: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7650: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
7660: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7670: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62 72 65  release */.  bre
7680: 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
7690: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
76a0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  P4.**.** P4 poin
76b0: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
76c0: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
76d0: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
76e0: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
76f0: 74 65 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73  ter P2. This ins
7700: 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  truction is not 
7710: 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a  coded directly.*
7720: 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  * by the compile
7730: 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20  r. Instead, the 
7740: 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73  compiler layer s
7750: 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f  pecifies.** an O
7760: 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65  P_HexBlob opcode
7770: 2c 20 77 69 74 68 20 74 68 65 20 68 65 78 20 73  , with the hex s
7780: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
7790: 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
77a0: 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69 73 20  lob as P4. This 
77b0: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
77c0: 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42  ormed to an OP_B
77d0: 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  lob.** the first
77e0: 20 74 69 6d 65 20 69 74 20 69 73 20 65 78 65 63   time it is exec
77f0: 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  uted..*/.case OP
7800: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
7810: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7820: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7830: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
7840: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
7850: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7860: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7870: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7880: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7890: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
78a0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
78b0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
78c0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
78d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
78e0: 61 62 6c 65 20 50 31 20 50 32 20 50 33 20 50 34  able P1 P2 P3 P4
78f0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65   *.**.** Transfe
7900: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
7910: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
7920: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74   P1..P1+P3-1 int
7930: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50  o registers.** P
7940: 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a  2..P2+P3-1..**.*
7950: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
7960: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
7970: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
7980: 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d  rs in P4 and P3=
7990: 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  =1..** The P4 va
79a0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
79b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
79c0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
79d0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
79e0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6a 20 3d 20 70  e: {.  int j = p
79f0: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 69 6e  Op->p1 - 1;.  in
7a00: 74 20 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  t k = pOp->p2;. 
7a10: 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e   Mem *pVar;.  in
7a20: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  t n = pOp->p3;. 
7a30: 20 61 73 73 65 72 74 28 20 6a 3e 3d 30 20 26 26   assert( j>=0 &&
7a40: 20 6a 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b   j+n<=p->nVar );
7a50: 0a 20 20 61 73 73 65 72 74 28 20 6b 3e 3d 31 20  .  assert( k>=1 
7a60: 26 26 20 6b 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65  && k+n-1<=p->nMe
7a70: 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
7a80: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
7a90: 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a 20 20  Op->p3==1 );..  
7aa0: 77 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29  while( n-- > 0 )
7ab0: 7b 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d  {.    pVar = &p-
7ac0: 3e 61 56 61 72 5b 6a 2b 2b 5d 3b 0a 20 20 20 20  >aVar[j++];.    
7ad0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
7ae0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
7af0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
7b00: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
7b10: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7b20: 6b 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  k++];.    sqlite
7b30: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
7b40: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
7b50: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
7b60: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73   MEM_Null;.    s
7b70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
7b80: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
7b90: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
7ba0: 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58  ;.    UPDATE_MAX
7bb0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7bc0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
7bd0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
7be0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
7bf0: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c  .** Move the val
7c00: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
7c10: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72  P1..P1+P3-1 over
7c20: 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
7c30: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20  rs P2..P2+P3-1. 
7c40: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
7c50: 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65  1+P1-1 are.** le
7c60: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
7c70: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
7c80: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
7c90: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
7ca0: 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32  +P3-1 and P2..P2
7cb0: 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70  +P3-1 to overlap
7cc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
7cd0: 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e: {.  char *zMa
7ce0: 6c 6c 6f 63 3b 0a 20 20 69 6e 74 20 6e 20 3d 20  lloc;.  int n = 
7cf0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 70  pOp->p3;.  int p
7d00: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  1 = pOp->p1;.  i
7d10: 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  nt p2 = pOp->p2;
7d20: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
7d30: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
7d40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
7d50: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
7d60: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 70   );..  pIn1 = &p
7d70: 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f  ->aMem[p1];.  pO
7d80: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  ut = &p->aMem[p2
7d90: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
7da0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
7db0: 4f 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d  Out<=&p->aMem[p-
7dc0: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
7dd0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 70 2d 3e  sert( pIn1<=&p->
7de0: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
7df0: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
7e00: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
7e10: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
7e20: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
7e30: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
7e40: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e  , pIn1);.    pIn
7e50: 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61  1->zMalloc = zMa
7e60: 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54  lloc;.    REGIST
7e70: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
7e80: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
7e90: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
7ea0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
7eb0: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
7ec0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7ed0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
7ee0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
7ef0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
7f00: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
7f10: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
7f20: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
7f30: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
7f40: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
7f50: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
7f60: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
7f70: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
7f80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
7f90: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
7fa0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
7fb0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
7fc0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7fd0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
7fe0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7ff0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8000: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8010: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8020: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8030: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8040: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
8050: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
8060: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8070: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8080: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8090: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
80a0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
80b0: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
80c0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
80d0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
80e0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
80f0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8100: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8110: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
8120: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8130: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8140: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8150: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8160: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8170: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8180: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8190: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
81a0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
81b0: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
81c0: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
81d0: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
81e0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
81f0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8200: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8210: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
8220: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8230: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8240: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8250: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8260: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
8270: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
8280: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
8290: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
82a0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 52 45 47 49 53  * in1 */.  REGIS
82b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
82c0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  1, pIn1);.  asse
82d0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
82e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
82f0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
8300: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
8310: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
8320: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
8330: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8340: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
8350: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
8360: 70 68 65 6d 29 3b 0a 20 20 52 45 47 49 53 54 45  phem);.  REGISTE
8370: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8380: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8390: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
83a0: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
83b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
83c0: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
83d0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
83e0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
83f0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
8400: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
8410: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
8420: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
8430: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
8440: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
8450: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
8460: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
8470: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
8480: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
8490: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
84a0: 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73  top P1 values as
84b0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72   the result.** r
84c0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
84d0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
84e0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
84f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
8500: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
8510: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
8520: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
8530: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
8540: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p2<=p->nMem+
8550: 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  1 );..  /* Inval
8560: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
8570: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
8580: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
8590: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
85a0: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
85b0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
85c0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
85d0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
85e0: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
85f0: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
8600: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
8610: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
8620: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
8630: 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69  ed as.  ** as si
8640: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
8650: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
8660: 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61 4d 65  ultSet = &p->aMe
8670: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
8680: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
8690: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
86a0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
86b0: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
86c0: 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49  ;.    storeTypeI
86d0: 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20 65 6e  nfo(&pMem[i], en
86e0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52 45 47  coding);.    REG
86f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8700: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
8710: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
8720: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
8730: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
8740: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
8750: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
8760: 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20   = pc + 1;.  rc 
8770: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
8780: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8790: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
87a0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
87b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  * *.**.** Add th
87c0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
87d0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
87e0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
87f0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
8800: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
8810: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
8820: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
8830: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
8840: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
8850: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
8860: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
8870: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
8880: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
8890: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
88a0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
88b0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
88c0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
88d0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
88e0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
88f0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
8900: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
8910: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
8920: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
8930: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8940: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
8950: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
8960: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
8970: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
8980: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
8990: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
89a0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
89b0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
89c0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
89d0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
89e0: 3b 0a 20 20 7d 0a 20 20 45 78 70 61 6e 64 42 6c  ;.  }.  ExpandBl
89f0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 53 74 72 69  ob(pIn1);.  Stri
8a00: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
8a10: 64 69 6e 67 29 3b 0a 20 20 45 78 70 61 6e 64 42  ding);.  ExpandB
8a20: 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 53 74 72  lob(pIn2);.  Str
8a30: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
8a40: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
8a50: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
8a60: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
8a70: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
8a80: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
8a90: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
8aa0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _big;.  }.  MemS
8ab0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
8ac0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
8ad0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
8ae0: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
8af0: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
8b00: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
8b10: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66  no_mem;.  }.  if
8b20: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
8b30: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
8b40: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
8b50: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
8b60: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
8b70: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
8b80: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
8b90: 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a  ->z[nByte] = 0;.
8ba0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
8bb0: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
8bc0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
8bd0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
8be0: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
8bf0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
8c00: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
8c10: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8c20: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8c30: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
8c40: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
8c50: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
8c60: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
8c70: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8c80: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
8c90: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8ca0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8cb0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
8cc0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
8cd0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8ce0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
8cf0: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
8d00: 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74   *.**.**.** Mult
8d10: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
8d20: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
8d30: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8d40: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
8d50: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8d60: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8d70: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
8d80: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
8d90: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8da0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
8db0: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
8dc0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74  3 * *.**.** Subt
8dd0: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
8de0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
8df0: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
8e00: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
8e10: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8e20: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8e30: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8e40: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8e50: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8e60: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8e70: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
8e80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69  3 * *.**.** Divi
8e90: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
8ea0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
8eb0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
8ec0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
8ed0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8ee0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
8ef0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
8f00: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
8f10: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
8f20: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8f30: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
8f40: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
8f50: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8f60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
8f70: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
8f80: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
8f90: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
8fa0: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
8fb0: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
8fc0: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
8fd0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
8fe0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8ff0: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9000: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
9010: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
9020: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9030: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9040: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
9050: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
9060: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
9070: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9080: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
90b0: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
90c0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
90d0: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
90e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
90f0: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
9100: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9110: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9130: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
9140: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9150: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
9160: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9170: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9180: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
9190: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
91a0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
91b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
91c0: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
91d0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
91e0: 74 20 66 6c 61 67 73 3b 0a 20 20 61 70 70 6c 79  t flags;.  apply
91f0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9200: 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e 75  pIn1);.  applyNu
9210: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
9220: 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  n2);.  flags = p
9230: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
9240: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
9250: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
9260: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
9270: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9280: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70  s_null;.  if( (p
9290: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
92a0: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
92b0: 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a  nt)==MEM_Int ){.
92c0: 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a 20 20      i64 a, b;.  
92d0: 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b    a = pIn1->u.i;
92e0: 0a 20 20 20 20 62 20 3d 20 70 49 6e 32 2d 3e 75  .    b = pIn2->u
92f0: 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  .i;.    switch( 
9300: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
9310: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
9320: 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d 20 61  :         b += a
9330: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9340: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
9350: 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d 20 61  tract:    b -= a
9360: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9370: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
9380: 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61  tiply:    b *= a
9390: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
93a0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
93b0: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
93c0: 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61  f( a==0 ) goto a
93d0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
93e0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
93f0: 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68    /* Dividing th
9400: 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  e largest possib
9410: 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62  le negative 64-b
9420: 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36  it integer (1<<6
9430: 33 29 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a  3) by .        *
9440: 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20  * -1 returns an 
9450: 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67  integer too larg
9460: 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20  e to store in a 
9470: 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65  64-bit data-type
9480: 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  . On.        ** 
9490: 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75 72  some architectur
94a0: 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76  es, the value ov
94b0: 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36  erflows to (1<<6
94c0: 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20  3). On others,. 
94d0: 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46         ** a SIGF
94e0: 50 45 20 69 73 20 69 73 73 75 65 64 2e 20 54 68  PE is issued. Th
94f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
9500: 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73  ement normalizes
9510: 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a   this.        **
9520: 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61   behavior so tha
9530: 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75  t all architectu
9540: 72 65 73 20 62 65 68 61 76 65 20 61 73 20 69 66  res behave as if
9550: 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20   integer .      
9560: 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63    ** overflow oc
9570: 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20  curred..        
9580: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  */.        if( a
9590: 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d 41 4c 4c  ==-1 && b==SMALL
95a0: 45 53 54 5f 49 4e 54 36 34 20 29 20 61 20 3d 20  EST_INT64 ) a = 
95b0: 31 3b 0a 20 20 20 20 20 20 20 20 62 20 2f 3d 20  1;.        b /= 
95c0: 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  a;.        break
95d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
95e0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
95f0: 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f     if( a==0 ) go
9600: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9610: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9620: 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d 31 20        if( a==-1 
9630: 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ) a = 1;.       
9640: 20 62 20 25 3d 20 61 3b 0a 20 20 20 20 20 20 20   b %= a;.       
9650: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9660: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
9670: 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d  u.i = b;.    Mem
9680: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9690: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
96a0: 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  lse{.    double 
96b0: 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20 73 71  a, b;.    a = sq
96c0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
96d0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 62 20  ue(pIn1);.    b 
96e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
96f0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
9700: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
9710: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
9720: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9730: 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20 20 20      b += a;     
9740: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9750: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9760: 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20 20 20      b -= a;     
9770: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9780: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9790: 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20 20 20      b *= a;     
97a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
97b0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
97c0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
97d0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
97e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
97f0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
9800: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 3d  /.        if( a=
9810: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
9820: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9830: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9840: 20 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20 20       b /= a;.   
9850: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9860: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
9870: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 36 34  t: {.        i64
9880: 20 69 61 20 3d 20 28 69 36 34 29 61 3b 0a 20 20   ia = (i64)a;.  
9890: 20 20 20 20 20 20 69 36 34 20 69 62 20 3d 20 28        i64 ib = (
98a0: 69 36 34 29 62 3b 0a 20 20 20 20 20 20 20 20 69  i64)b;.        i
98b0: 66 28 20 69 61 3d 3d 30 20 29 20 67 6f 74 6f 20  f( ia==0 ) goto 
98c0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
98d0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
98e0: 20 20 20 69 66 28 20 69 61 3d 3d 2d 31 20 29 20     if( ia==-1 ) 
98f0: 69 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  ia = 1;.        
9900: 62 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 62 20  b = (double)(ib 
9910: 25 20 69 61 29 3b 0a 20 20 20 20 20 20 20 20 62  % ia);.        b
9920: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9930: 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
9940: 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b 0a 20  te3IsNaN(b) ){. 
9950: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
9960: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9970: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
9980: 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20 20 20  Out->r = b;.    
9990: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
99a0: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
99b0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26      if( (flags &
99c0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
99d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
99e0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
99f0: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20  y(pOut);.    }. 
9a00: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
9a10: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9a20: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
9a30: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
9a40: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9a50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
9a60: 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a  llSeq * * P4.**.
9a70: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
9a80: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
9a90: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
9aa0: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
9ab0: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
9ac0: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
9ad0: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
9ae0: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
9af0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9b00: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
9b10: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
9b20: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
9b30: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
9b40: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
9b50: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
9b60: 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
9b70: 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70   used by the imp
9b80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
9b90: 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65  he aforementione
9ba0: 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74  d functions.** t
9bb0: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63  o retrieve the c
9bc0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
9bd0: 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70  e set by this op
9be0: 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69  code is not avai
9bf0: 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c  lable.** publicl
9c00: 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20  y, only to user 
9c10: 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65  functions define
9c20: 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a  d in func.c..*/.
9c30: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
9c40: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9c50: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
9c60: 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b  LSEQ );.  break;
9c70: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
9c80: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
9c90: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76   P4 P5.**.** Inv
9ca0: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
9cb0: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
9cc0: 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69  nter to a Functi
9cd0: 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61  on structure tha
9ce0: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
9cf0: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
9d00: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
9d10: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
9d20: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
9d30: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
9d40: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
9d50: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
9d60: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9d70: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
9d80: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
9d90: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
9da0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
9db0: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
9dc0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
9dd0: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
9de0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
9df0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
9e00: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
9e10: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
9e20: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
9e30: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
9e40: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
9e50: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
9e60: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
9e70: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
9e80: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
9e90: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
9ea0: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
9eb0: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
9ec0: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
9ed0: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
9ee0: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
9ef0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
9f00: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
9f10: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
9f20: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
9f30: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67  .** See also: Ag
9f40: 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e  gStep and AggFin
9f50: 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75  al.*/.case OP_Fu
9f60: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
9f70: 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a  i;.  Mem *pArg;.
9f80: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
9f90: 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
9fa0: 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
9fb0: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
9fc0: 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  5;..  apVal = p-
9fd0: 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
9fe0: 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
9ff0: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
a000: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
a010: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70   && pOp->p2+n<=p
a020: 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61  ->nMem+1) );.  a
a030: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
a040: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
a050: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
a060: 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65    pArg = &p->aMe
a070: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
a080: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
a090: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70   pArg++){.    ap
a0a0: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
a0b0: 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
a0c0: 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29  (pArg, encoding)
a0d0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
a0e0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41  RACE(pOp->p2, pA
a0f0: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
a100: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a110: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
a120: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
a130: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
a140: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
a150: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
a160: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
a170: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
a180: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
a190: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
a1a0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
a1b0: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
a1c0: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
a1d0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
a1e0: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
a1f0: 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  c;.  }..  assert
a200: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
a210: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
a220: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
a230: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a240: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
a250: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
a260: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
a270: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
a280: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
a290: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
a2a0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
a2b0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
a2c0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
a2d0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
a2e0: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
a2f0: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
a300: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
a310: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
a320: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
a330: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
a340: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
a350: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
a360: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
a370: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
a380: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
a390: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
a3a0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
a3b0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
a3c0: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
a3d0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a3e0: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
a3f0: 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
a400: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
a410: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
a420: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
a430: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
a440: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
a450: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
a460: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
a470: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  oll;.  }.  if( s
a480: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
a490: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
a4a0: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
a4b0: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
a4c0: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
a4d0: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  pVal);.  if( sql
a4e0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
a4f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
a500: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
a510: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
a520: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
a530: 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  use;.  }.  if( d
a540: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
a550: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
a560: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
a570: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
a580: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
a590: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
a5a0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
a5b0: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
a5c0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
a5d0: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
a5e0: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
a5f0: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
a600: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
a610: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
a620: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
a630: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
a640: 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  alue..    **.   
a650: 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20   ** Note: Maybe 
a660: 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f  MemRelease() sho
a670: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66  uld be called if
a680: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
a690: 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20  ().    ** fails 
a6a0: 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e  also (the if(...
a6b0: 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  ) statement abov
a6c0: 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c  e). But if peopl
a6d0: 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73  e are.    ** mis
a6e0: 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68  using sqlite, th
a6f0: 65 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70  ey have bigger p
a700: 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c  roblems than a l
a710: 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20  eaked value..   
a720: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
a730: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
a740: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
a750: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
a760: 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61  * If any auxilia
a770: 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e  ry data function
a780: 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c  s have been call
a790: 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20  ed by this user 
a7a0: 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69  function,.  ** i
a7b0: 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20  mmediately call 
a7c0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  the destructor f
a7d0: 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69  or any non-stati
a7e0: 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20  c values..  */. 
a7f0: 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75   if( ctx.pVdbeFu
a800: 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nc ){.    sqlite
a810: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
a820: 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63  ta(ctx.pVdbeFunc
a830: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
a840: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
a850: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
a860: 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79  c;.    pOp->p4ty
a870: 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43  pe = P4_VDBEFUNC
a880: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
a890: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
a8a0: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
a8b0: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
a8c0: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  n */.  if( ctx.i
a8d0: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
a8e0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
a8f0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
a900: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
a910: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
a920: 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
a930: 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
a940: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
a950: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
a960: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
a970: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
a980: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
a990: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
a9a0: 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
a9b0: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
a9c0: 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20   &ctx.s);.  if( 
a9d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
a9e0: 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20  oBig(pOut) ){.  
a9f0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
aa00: 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
aa10: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
aa20: 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
aa30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
aa40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
aa50: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
aa60: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
aa70: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
aa80: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
aa90: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
aaa0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
aab0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
aac0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
aad0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
aae0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
aaf0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ab00: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ab10: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
ab20: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
ab30: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
ab40: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
ab50: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
ab60: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
ab70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
ab80: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
ab90: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
aba0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
abb0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
abc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
abd0: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
abe0: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
abf0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
ac00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
ac10: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
ac20: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
ac30: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
ac40: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
ac50: 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53  regiser P1..** S
ac60: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ac70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
ac80: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
ac90: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
aca0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
acb0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
acc0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
acd0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
ace0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
acf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad00: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
ad10: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
ad20: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
ad30: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
ad40: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
ad50: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
ad60: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ad70: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ad80: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ad90: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ada0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
adb0: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
adc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
add0: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
ade0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
adf0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
ae20: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
ae30: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ae40: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
ae50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ae60: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
ae70: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ae80: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
ae90: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
aea0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
aeb0: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
aec0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c  out3 */.  i64 a,
aed0: 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31   b;..  if( (pIn1
aee0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
aef0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
af00: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
af10: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
af20: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
af30: 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74  .  }.  a = sqlit
af40: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
af50: 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69  In2);.  b = sqli
af60: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
af70: 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28  pIn1);.  switch(
af80: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
af90: 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41      case OP_BitA
afa0: 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b  nd:      a &= b;
afb0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
afc0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
afd0: 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20       a |= b;    
afe0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
aff0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b000: 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65   a <<= b;    bre
b010: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
b020: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
b030: 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52  pcode==OP_ShiftR
b040: 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ight );.        
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b060: 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65   a >>= b;    bre
b070: 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ak;.  }.  pOut->
b080: 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65  u.i = a;.  MemSe
b090: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
b0a0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
b0b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b0c0: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
b0d0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20   * *.** .** Add 
b0e0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
b0f0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
b100: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
b110: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
b120: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
b130: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
b140: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
b150: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
b160: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
b170: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
b180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
b190: 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  1 */.  sqlite3Vd
b1a0: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
b1b0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
b1c0: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
b1d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b1e0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
b1f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
b200: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
b210: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b220: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
b230: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
b240: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
b250: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
b260: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
b270: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
b280: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
b290: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
b2a0: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
b2b0: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
b2c0: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
b2d0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
b2e0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
b2f0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
b300: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
b310: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
b320: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
b330: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
b340: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
b350: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b360: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
b370: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
b380: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
b390: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
b3a0: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67  ISMATCH;.      g
b3b0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
b3c0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
b3d0: 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  e{.      pc = pO
b3e0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
b3f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65  .  }else{.    Me
b400: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
b410: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  1, MEM_Int);.  }
b420: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b430: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
b440: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
b450: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
b460: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
b470: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
b480: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
b490: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
b4a0: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
b4b0: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
b4c0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
b4d0: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
b4e0: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
b4f0: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
b500: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
b510: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
b520: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
b530: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
b540: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
b550: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
b560: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
b570: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
b580: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
b590: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
b5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
b5b0: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
b5c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
b5d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b5e0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
b5f0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
b600: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
b610: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
b620: 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20   Opcode: ToText 
b630: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b640: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
b650: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b660: 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49  to be text..** I
b670: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
b680: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
b690: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75  it to a string u
b6a0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
b6b0: 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66  valent of printf
b6c0: 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73  ().  Blob values
b6d0: 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61   are unchanged a
b6e0: 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77  nd.** are afterw
b6f0: 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65  ards simply inte
b700: 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 2e  rpreted as text.
b710: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
b720: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
b730: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
b740: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
b750: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b760: 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20  _ToText: {      
b770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b780: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58  ame as TK_TO_TEX
b790: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
b7a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b7b0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
b7c0: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
b7d0: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
b7e0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
b7f0: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
b800: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
b810: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
b820: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
b830: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
b840: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
b850: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
b860: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
b870: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
b880: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
b890: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
b8a0: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
b8b0: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d  _Real|MEM_Blob|M
b8c0: 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41  EM_Zero);.  UPDA
b8d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
b8e0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
b8f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
b900: 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Blob P1 * * * *.
b910: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
b920: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b930: 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f  r P1 to be a BLO
b940: 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  B..** If the val
b950: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
b960: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
b970: 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20  tring first..** 
b980: 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70  Strings are simp
b990: 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64  ly reinterpreted
b9a0: 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e   as blobs with n
b9b0: 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74  o change.** to t
b9c0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
b9d0: 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ta..**.** A NULL
b9e0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
b9f0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
ba00: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
ba10: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
ba20: 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20   OP_ToBlob: {   
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
ba50: 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  BLOB, in1 */.  i
ba60: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
ba70: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
ba80: 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  k;.  if( (pIn1->
ba90: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
baa0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
bab0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
bac0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
bad0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
bae0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
baf0: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c  ags & MEM_Str ||
bb00: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
bb10: 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  d );.    MemSetT
bb20: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
bb30: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65  M_Blob);.  }else
bb40: 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67  {.    pIn1->flag
bb50: 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d  s &= ~(MEM_TypeM
bb60: 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  ask&~MEM_Blob);.
bb70: 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
bb80: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
bb90: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bba0: 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69  Opcode: ToNumeri
bbb0: 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  c P1 * * * *.**.
bbc0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
bbd0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bbe0: 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20  1 to be numeric 
bbf0: 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e  (either an.** in
bc00: 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74  teger or a float
bc10: 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing-point number
bc20: 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  .).** If the val
bc30: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
bc40: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
bc50: 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e  rt it to an usin
bc60: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
bc70: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72  ent of atoi() or
bc80: 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72   atof() and stor
bc90: 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  e 0 if no such c
bca0: 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73  onversion .** is
bcb0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
bcc0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
bcd0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
bce0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
bcf0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
bd00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d  */.case OP_ToNum
bd10: 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20  eric: {         
bd20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bd30: 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49   as TK_TO_NUMERI
bd40: 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  C, in1 */.  if( 
bd50: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn1->flags & (
bd60: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Null|MEM_Int
bd70: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
bd80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
bd90: 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e  eMemNumerify(pIn
bda0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
bdb0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
bdc0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
bdd0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49  ../* Opcode: ToI
bde0: 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nt P1 * * * *.**
bdf0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
be00: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
be10: 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  P1 be an integer
be20: 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c  .  If.** The val
be30: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
be40: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64  a real number, d
be50: 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e  rop its fraction
be60: 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74  al part..** If t
be70: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
be80: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
be90: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bea0: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
beb0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
bec0: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
bed0: 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75  store 0 if no su
bee0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
bef0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
bf00: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
bf10: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
bf20: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
bf30: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
bf40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74  */.case OP_ToInt
bf50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
bf60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bf70: 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a  TK_TO_INT, in1 *
bf80: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
bf90: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
bfa0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
bfb0: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
bfc0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
bfd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
bfe0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
bff0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
c000: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
c010: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c020: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c030: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
c040: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
c050: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
c060: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
c070: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
c080: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
c090: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
c0a0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
c0b0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
c0c0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
c0d0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c0e0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
c0f0: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
c100: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
c110: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
c120: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c130: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c140: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c150: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c160: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c170: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
c180: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c190: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
c1a0: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in1 */.  if( (pI
c1b0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c1c0: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
c1d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
c1e0: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
c1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
c200: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
c210: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
c220: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
c230: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f  3 P4 P5.**.** Co
c240: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
c250: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c260: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
c270: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
c280: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
c290: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
c2a0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
c2b0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
c2c0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
c2d0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
c2e0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
c2f0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
c300: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
c310: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
c320: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
c330: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75  r then fall thru
c340: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
c350: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
c360: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
c370: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
c380: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
c390: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
c3a0: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
c3b0: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
c3c0: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
c3d0: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
c3e0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
c3f0: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
c400: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
c410: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
c420: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
c430: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
c440: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
c450: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
c460: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
c470: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
c480: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
c490: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
c4a0: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
c4b0: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
c4c0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
c4d0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
c4e0: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
c4f0: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
c500: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
c510: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
c520: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
c530: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
c540: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
c550: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
c560: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
c570: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
c580: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
c590: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
c5a0: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
c5b0: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
c5c0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
c5d0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
c5e0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
c5f0: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
c600: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
c610: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
c620: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
c630: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
c640: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
c650: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
c660: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
c670: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
c680: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
c690: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
c6a0: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
c6b0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
c6c0: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
c6d0: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
c6e0: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
c6f0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
c700: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
c710: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
c720: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
c730: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
c740: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
c750: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
c760: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
c770: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
c780: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
c790: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
c7a0: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
c7b0: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
c7c0: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
c7d0: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
c7e0: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
c7f0: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
c800: 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P2..*/./* Opco
c810: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
c820: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
c830: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
c840: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
c850: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
c860: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
c870: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
c880: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
c890: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
c8a0: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c  qual.  See the L
c8b0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  t opcode for.** 
c8c0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
c8d0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
c8e0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
c8f0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
c900: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
c910: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
c920: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
c930: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
c940: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
c950: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
c960: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
c970: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
c980: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
c990: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
c9a0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
c9b0: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
c9c0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
c9d0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
c9e0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
c9f0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ca00: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ca10: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
ca20: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
ca30: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
ca40: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
ca50: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
ca60: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
ca70: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
ca80: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
ca90: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
caa0: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
cab0: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
cac0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
cad0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
cae0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
caf0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
cb00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
cb10: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
cb20: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
cb30: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
cb40: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
cb50: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
cb60: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
cb70: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
cb80: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
cb90: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
cba0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
cbb0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
cbc0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
cbd0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cbe0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
cbf0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
cc00: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
cc10: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
cc20: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
cc30: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
cc40: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
cc50: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
cc60: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
cc70: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
cc80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cc90: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
cca0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ccb0: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
ccc0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ccd0: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
cce0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ccf0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
cd00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cd10: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
cd20: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
cd30: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
cd40: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cd50: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
cd60: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
cd70: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
cd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
cd90: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
cda0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
cdb0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
cdc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
cdd0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
cde0: 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  */.  int flags;.
cdf0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61    int res;.  cha
ce00: 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20 66  r affinity;..  f
ce10: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
ce20: 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a  gs|pIn3->flags;.
ce30: 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d 45 4d  .  if( flags&MEM
ce40: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
ce50: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
ce60: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
ce70: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
ce80: 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2a  ays NULL..    **
ce90: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
cea0: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
ceb0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
cec0: 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a 20  is set..    */. 
ced0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
cee0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
cef0: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  ){.      pOut = 
cf00: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
cf10: 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54  ];.      MemSetT
cf20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
cf30: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 52  M_Null);.      R
cf40: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
cf50: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
cf60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
cf70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
cf80: 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
cf90: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
cfa0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
cfb0: 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69 74  ;.  }..  affinit
cfc0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
cfd0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
cfe0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b   if( affinity ){
cff0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
d000: 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74  ty(pIn1, affinit
d010: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
d020: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
d030: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
d040: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
d050: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
d060: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
d070: 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  m;.  }..  assert
d080: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
d090: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
d0a0: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
d0b0: 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  .  ExpandBlob(pI
d0c0: 6e 31 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f  n1);.  ExpandBlo
d0d0: 62 28 70 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d  b(pIn3);.  res =
d0e0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
d0f0: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
d100: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
d110: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
d120: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
d130: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
d140: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
d150: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
d160: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
d170: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
d180: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
d190: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
d1a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d1b0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
d1c0: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
d1d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
d1e0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
d1f0: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
d200: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
d210: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
d220: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
d230: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
d240: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
d250: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
d260: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
d270: 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  p2];.    MemSetT
d280: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d290: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
d2a0: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
d2b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d2c0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
d2d0: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20    }else if( res 
d2e0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
d2f0: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
d300: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d310: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
d320: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
d330: 65 74 20 74 68 65 20 70 65 72 6d 75 61 74 69 6f  et the permuatio
d340: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
d350: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
d360: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
d370: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
d380: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
d390: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
d3a0: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
d3b0: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65  l the next OP_Pe
d3c0: 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f  rmutation, OP_Co
d3d0: 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c  mpare,.** OP_Hal
d3e0: 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52  t, or OP_ResultR
d3f0: 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74  ow.  Typically t
d400: 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  he OP_Permutatio
d410: 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a  n should occur.*
d420: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  * immediately pr
d430: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
d440: 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
d450: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
d460: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d470: 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
d480: 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
d490: 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
d4a0: 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
d4b0: 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
d4c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
d4d0: 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
d4e0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  P4 *.**.** Compa
d4f0: 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66  re to vectors of
d500: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
d510: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
d520: 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a  -1) (all this.**
d530: 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e   one "A") and in
d540: 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
d550: 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
d560: 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
d570: 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
d580: 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
d590: 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
d5a0: 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
d5b0: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
d5c0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
d5d0: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
d5e0: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
d5f0: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
d600: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
d610: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
d620: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
d630: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
d640: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
d650: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
d660: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
d670: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
d680: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
d690: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
d6a0: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
d6b0: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
d6c0: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
d6d0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
d6e0: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
d6f0: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
d700: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
d710: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
d720: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
d730: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  n = pOp->p3;.  i
d740: 6e 74 20 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20  nt i, p1, p2;.  
d750: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
d760: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
d770: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
d780: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
d790: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
d7a0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
d7b0: 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
d7c0: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d  p1>0 && p1+n<=p-
d7d0: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 32 20  >nMem+1 );.  p2 
d7e0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
d7f0: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
d800: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
d810: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
d820: 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 69 64  i++){.    int id
d830: 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
d840: 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
d850: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
d860: 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
d870: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
d880: 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
d890: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 52 65 76   */.    int bRev
d8a0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
d8b0: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
d8c0: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
d8d0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
d8e0: 43 45 28 70 31 2b 69 64 78 2c 20 26 70 2d 3e 61  CE(p1+idx, &p->a
d8f0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
d900: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d910: 28 70 32 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65  (p2+idx, &p->aMe
d920: 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
d930: 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
d940: 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
d950: 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
d960: 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
d970: 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
d980: 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
d990: 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
d9a0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
d9b0: 72 65 28 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69  re(&p->aMem[p1+i
d9c0: 64 78 5d 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  dx], &p->aMem[p2
d9d0: 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
d9e0: 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
d9f0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
da00: 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
da10: 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
da20: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
da30: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
da40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
da50: 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
da60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
da70: 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
da80: 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
da90: 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
daa0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
dab0: 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
dac0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
dad0: 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
dae0: 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
daf0: 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
db00: 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
db10: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
db20: 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
db30: 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
db40: 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
db50: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
db60: 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
db70: 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
db80: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d  pOp->p1 - 1;.  }
db90: 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
dba0: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
dbb0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
dbc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
dbd0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d  pOp->p3 - 1;.  }
dbe0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
dbf0: 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
dc00: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
dc10: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
dc20: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
dc30: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
dc40: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
dc50: 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
dc60: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
dc70: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
dc80: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
dc90: 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
dca0: 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
dcb0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
dcc0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
dcd0: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
dce0: 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
dcf0: 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
dd00: 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
dd10: 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
dd20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
dd30: 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
dd40: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
dd50: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dd60: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
dd70: 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
dd80: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
dd90: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
dda0: 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
ddb0: 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
ddc0: 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
ddd0: 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
dde0: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
ddf0: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
de00: 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
de10: 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
de20: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
de30: 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
de40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
de50: 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
de60: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
de70: 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
de80: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
de90: 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
dea0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
deb0: 74 20 76 31 2c 20 76 32 3b 20 20 20 20 2f 2a 20  t v1, v2;    /* 
dec0: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
ded0: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
dee0: 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 69 66 28 20   NULL */..  if( 
def0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
df00: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
df10: 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
df20: 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
df30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
df40: 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
df50: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
df60: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
df70: 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
df80: 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
df90: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
dfa0: 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
dfb0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
dfc0: 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
dfd0: 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
dfe0: 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
dff0: 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
e000: 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
e010: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
e020: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
e030: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
e040: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
e050: 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
e060: 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
e070: 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
e080: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
e090: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
e0a0: 20 20 7d 0a 20 20 69 66 28 20 76 31 3d 3d 32 20    }.  if( v1==2 
e0b0: 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
e0c0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e0d0: 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
e0e0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
e0f0: 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
e100: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
e110: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
e120: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e130: 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
e140: 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  *.**.** Interpre
e150: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
e160: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
e170: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
e180: 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
e190: 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
e1a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
e1b0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
e1c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e1d0: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
e1e0: 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
e1f0: 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
e200: 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
e210: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e220: 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a  as TK_NOT, in1 *
e230: 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  /.  pOut = &p->a
e240: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
e250: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
e260: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
e270: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
e280: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
e290: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
e2a0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
e2b0: 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65  64(pOut, !sqlite
e2c0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
e2d0: 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
e2e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
e2f0: 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
e300: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  * *.**.** Interp
e310: 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
e320: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
e330: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
e340: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
e350: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
e360: 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
e370: 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
e380: 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
e390: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
e3a0: 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
e3b0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
e3c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
e3d0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
e3e0: 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f  NOT, in1 */.  pO
e3f0: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
e400: 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
e410: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e420: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
e430: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
e440: 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
e450: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e460: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
e470: 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49  t, ~sqlite3VdbeI
e480: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
e490: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e4a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
e4b0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e4c0: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
e4d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e4e0: 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
e4f0: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e500: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e510: 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
e520: 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
e530: 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
e540: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
e550: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
e560: 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74   jump if P3 is t
e570: 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  rue..*/./* Opcod
e580: 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
e590: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
e5a0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
e5b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e5c0: 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
e5d0: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73  e value is.** is
e5e0: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
e5f0: 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
e600: 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
e610: 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
e620: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
e630: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
e640: 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74   jump if P3 is t
e650: 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rue..*/.case OP_
e660: 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
e670: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e680: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
e690: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e6a0: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
e6b0: 20 20 69 6e 74 20 63 3b 0a 20 20 69 66 28 20 70    int c;.  if( p
e6c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e6d0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
e6e0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
e6f0: 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
e700: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
e710: 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
e720: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
e730: 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
e740: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
e750: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
e760: 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
e770: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
e780: 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
e790: 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69   c = !c;.  }.  i
e7a0: 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d  f( c ){.    pc =
e7b0: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
e7c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e7d0: 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
e7e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e7f0: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
e800: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e810: 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
e820: 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74    If P3 is great
e830: 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f 2c  er.** than zero,
e840: 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c 20   then check all 
e850: 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c 20  values reg(P1), 
e860: 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20 72  reg(P1+1), .** r
e870: 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20 72  eg(P1+2), ..., r
e880: 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f 0a  eg(P1+P3-1)..*/.
e890: 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
e8a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
e8b0: 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
e8c0: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
e8d0: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
e8e0: 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
e8f0: 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
e900: 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20 20  p1>0 );.  do{.  
e910: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e920: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
e930: 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
e940: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
e950: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
e960: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77      pIn1++;.  }w
e970: 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29 3b  hile( --n > 0 );
e980: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e990: 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
e9a0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
e9b0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e9c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e9d0: 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
e9e0: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
e9f0: 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
ea00: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ea10: 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
ea20: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
ea30: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ea40: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
ea50: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
ea60: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
ea70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ea80: 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  e: SetNumColumns
ea90: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
eaa0: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73 65  * This opcode se
eab0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
eac0: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65   columns for the
ead0: 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62   cursor opened b
eae0: 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  y the.** followi
eaf0: 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ng instruction t
eb00: 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f  o P2..**.** An O
eb10: 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  P_SetNumColumns 
eb20: 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20 69  is only useful i
eb30: 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d 65  f it occurs imme
eb40: 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 0a  diately before .
eb50: 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ** one of the fo
eb60: 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 3a  llowing opcodes:
eb70: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 52  .**.**     OpenR
eb80: 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 57  ead.**     OpenW
eb90: 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  rite.**     Open
eba0: 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20  Pseudo.**.** If 
ebb0: 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
ebc0: 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65 78  code is to be ex
ebd0: 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72 73  ecuted on a curs
ebe0: 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  or, then.** this
ebf0: 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
ec00: 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61 74  present immediat
ec10: 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20 6f  ely before the o
ec20: 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f 70  pcode that.** op
ec30: 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ens the cursor..
ec40: 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65 20 4f 50  */.#if 0.case OP
ec50: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20  _SetNumColumns: 
ec60: 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  {.  break;.}.#en
ec70: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
ec80: 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
ec90: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  P4 *.**.** Inter
eca0: 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
ecb0: 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
ecc0: 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
ecd0: 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
ece0: 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
ecf0: 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
ed00: 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
ed10: 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
ed20: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
ed30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ed40: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
ed50: 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
ed60: 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
ed70: 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
ed80: 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
ed90: 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
eda0: 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
edb0: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
edc0: 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
edd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
ede0: 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
edf0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
ee00: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
ee10: 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
ee20: 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
ee30: 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
ee40: 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
ee50: 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
ee60: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
ee70: 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
ee80: 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
ee90: 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
eea0: 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  result..*/.case 
eeb0: 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69  OP_Column: {.  i
eec0: 6e 74 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  nt payloadSize; 
eed0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
eee0: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
eef0: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d  rd */.  int p1 =
ef00: 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20 50 31   pOp->p1;  /* P1
ef10: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
ef20: 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32  code */.  int p2
ef30: 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f 2a 20   = pOp->p2;  /* 
ef40: 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
ef50: 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
ef60: 64 62 65 43 75 72 73 6f 72 20 2a 70 43 20 3d 20  dbeCursor *pC = 
ef70: 30 3b 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75  0;/* The VDBE cu
ef80: 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rsor */.  char *
ef90: 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  zRec;        /* 
efa0: 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c  Pointer to compl
efb0: 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20  ete record-data 
efc0: 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
efd0: 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
efe0: 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
eff0: 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
f000: 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
f010: 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
f020: 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
f030: 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
f040: 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
f050: 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
f060: 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
f070: 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
f080: 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
f090: 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
f0a0: 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20     /* number of 
f0b0: 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
f0c0: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  cord */.  int le
f0d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
f0e0: 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
f0f0: 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
f100: 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
f110: 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
f120: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
f130: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68   counter */.  ch
f140: 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20  ar *zData;      
f150: 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
f160: 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
f170: 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  oded */.  Mem *p
f180: 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
f190: 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
f1a0: 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
f1b0: 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
f1c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
f1d0: 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
f1e0: 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
f1f0: 65 64 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28  ed */..  memset(
f200: 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
f210: 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73 65 72  (sMem));.  asser
f220: 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  t( p1<p->nCursor
f230: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
f240: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
f250: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
f260: 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65   pDest = &p->aMe
f270: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65  m[pOp->p3];.  Me
f280: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
f290: 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  st, MEM_Null);..
f2a0: 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
f2b0: 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
f2c0: 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
f2d0: 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
f2e0: 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
f2f0: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
f300: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
f310: 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
f320: 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
f330: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
f340: 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
f350: 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
f360: 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
f370: 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
f380: 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
f390: 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
f3a0: 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
f3b0: 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
f3c0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
f3d0: 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
f3e0: 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
f3f0: 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
f400: 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
f410: 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
f420: 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
f430: 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
f440: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
f450: 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
f460: 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
f470: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
f480: 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
f490: 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
f4a0: 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
f4b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
f4c0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
f4d0: 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
f4e0: 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
f4f0: 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
f500: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
f510: 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
f520: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
f530: 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
f540: 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
f550: 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
f560: 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
f570: 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
f580: 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65   record is store
f590: 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f  d in a B-Tree */
f5a0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
f5b0: 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
f5c0: 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
f5d0: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
f5e0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
f5f0: 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20 70   zRec = 0;.    p
f600: 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
f610: 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
f620: 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
f630: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
f640: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
f650: 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
f660: 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
f670: 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
f680: 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  e = pC->payloadS
f690: 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20  ize;.      zRec 
f6a0: 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f  = (char*)pC->aRo
f6b0: 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  w;.    }else if(
f6c0: 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
f6d0: 20 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f 61        i64 payloa
f6e0: 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 73  dSize64;.      s
f6f0: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
f700: 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
f710: 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
f720: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28   payloadSize = (
f730: 69 6e 74 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  int)payloadSize6
f740: 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  4;.    }else{.  
f750: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
f760: 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
f770: 28 75 33 32 20 2a 29 26 70 61 79 6c 6f 61 64 53  (u32 *)&payloadS
f780: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
f790: 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69  nField = pC->nFi
f7a0: 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  eld;.  }else{.  
f7b0: 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
f7c0: 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20 20  eudoTable );.   
f7d0: 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
f7e0: 73 20 74 68 65 20 73 6f 6c 65 20 65 6e 74 72 79  s the sole entry
f7f0: 20 6f 66 20 61 20 70 73 65 75 64 6f 2d 74 61 62   of a pseudo-tab
f800: 6c 65 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61  le */.    payloa
f810: 64 53 69 7a 65 20 3d 20 70 43 2d 3e 6e 44 61 74  dSize = pC->nDat
f820: 61 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 43  a;.    zRec = pC
f830: 2d 3e 70 44 61 74 61 3b 0a 20 20 20 20 70 43 2d  ->pData;.    pC-
f840: 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
f850: 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
f860: 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53  assert( payloadS
f870: 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d  ize==0 || zRec!=
f880: 30 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  0 );.    nField 
f890: 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  = pC->nField;.  
f8a0: 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 7d    pCrsr = 0;.  }
f8b0: 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61  ..  /* If payloa
f8c0: 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e  dSize is 0, then
f8d0: 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55   just store a NU
f8e0: 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c  LL */.  if( payl
f8f0: 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20  oadSize==0 ){.  
f900: 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d    assert( pDest-
f910: 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20  >flags&MEM_Null 
f920: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  );.    goto op_c
f930: 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20  olumn_out;.  }. 
f940: 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65   if( payloadSize
f950: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
f960: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
f970: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
f980: 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _big;.  }..  ass
f990: 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29  ert( p2<nField )
f9a0: 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64  ;..  /* Read and
f9b0: 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65   parse the table
f9c0: 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20   header.  Store 
f9d0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
f9e0: 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e  he parse.  ** in
f9f0: 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  to the record he
fa00: 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64  ader cache field
fa10: 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e  s of the cursor.
fa20: 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20  .  */.  aType = 
fa30: 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28  pC->aType;.  if(
fa40: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
fa50: 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
fa60: 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70  .    aOffset = p
fa70: 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65  C->aOffset;.  }e
fa80: 6c 73 65 7b 0a 20 20 20 20 75 38 20 2a 7a 49 64  lse{.    u8 *zId
fa90: 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64  x;        /* Ind
faa0: 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
fab0: 2f 0a 20 20 20 20 75 38 20 2a 7a 45 6e 64 48 64  /.    u8 *zEndHd
fac0: 72 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  r;     /* Pointe
fad0: 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
fae0: 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
faf0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6f 66 66 73   */.    int offs
fb00: 65 74 3b 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  et;      /* Offs
fb10: 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
fb20: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73 7a 48 64   */.    int szHd
fb30: 72 53 7a 3b 20 20 20 20 20 2f 2a 20 53 69 7a 65  rSz;     /* Size
fb40: 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73   of the header s
fb50: 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61  ize field at sta
fb60: 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a  rt of record */.
fb70: 20 20 20 20 69 6e 74 20 61 76 61 69 6c 20 3d 20      int avail = 
fb80: 30 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  0;   /* Number o
fb90: 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
fba0: 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 0a 20 20  able data */..  
fbb0: 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b    assert(aType);
fbc0: 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74  .    pC->aOffset
fbd0: 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54   = aOffset = &aT
fbe0: 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
fbf0: 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
fc00: 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a   = payloadSize;.
fc10: 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
fc20: 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
fc30: 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72  r;..    /* Figur
fc40: 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62  e out how many b
fc50: 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20  ytes are in the 
fc60: 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66  header */.    if
fc70: 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20  ( zRec ){.      
fc80: 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20  zData = zRec;.  
fc90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
fca0: 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
fcb0: 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
fcc0: 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
fcd0: 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
fce0: 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
fcf0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
fd00: 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
fd10: 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  *)sqlite3BtreeDa
fd20: 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
fd30: 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
fd40: 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46        /* If KeyF
fd50: 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68  etch()/DataFetch
fd60: 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65  () managed to ge
fd70: 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  t the entire pay
fd80: 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73  load,.      ** s
fd90: 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ave the payload 
fda0: 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20  in the pC->aRow 
fdb0: 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c  cache.  That wil
fdc0: 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20  l save us from. 
fdd0: 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74       ** having t
fde0: 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61  o make additiona
fdf0: 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68  l calls to fetch
fe00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72   the content por
fe10: 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a  tion of.      **
fe20: 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
fe30: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
fe40: 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
fe50: 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52  ze ){.        zR
fe60: 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20  ec = zData;.    
fe70: 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
fe80: 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20  u8*)zData;.     
fe90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fea0: 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
feb0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
fec0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
fed0: 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20   assert is true 
fee0: 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63  in all cases acc
fef0: 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20  ept when.    ** 
ff00: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
ff10: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75  e has been corru
ff20: 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e  pted externally.
ff30: 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72  .    **    asser
ff40: 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76  t( zRec!=0 || av
ff50: 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65  ail>=payloadSize
ff60: 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20   || avail>=9 ); 
ff70: 2a 2f 0a 20 20 20 20 73 7a 48 64 72 53 7a 20 3d  */.    szHdrSz =
ff80: 20 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38   getVarint32((u8
ff90: 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29  *)zData, offset)
ffa0: 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65  ;..    /* The Ke
ffb0: 79 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61  yFetch() or Data
ffc0: 46 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72  Fetch() above ar
ffd0: 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20  e fast and will 
ffe0: 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20  get the entire. 
fff0: 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
10000 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65  der in most case
10010 73 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c  s.  But they wil
10020 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68  l fail to get th
10030 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a  e complete.    *
10040 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
10050 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  if the record he
10060 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69  ader does not fi
10070 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61  t on a single pa
10080 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ge.    ** in the
10090 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74   B-Tree.  When t
100a0 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65  hat happens, use
100b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
100c0 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20  romBtree() to.  
100d0 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65    ** acquire the
100e0 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
100f0 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20   text..    */.  
10100 20 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61    if( !zRec && a
10110 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
10120 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20       sMem.flags 
10130 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  = 0;.      sMem.
10140 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  db = 0;.      rc
10150 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
10160 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
10170 2c 20 30 2c 20 6f 66 66 73 65 74 2c 20 70 43 2d  , 0, offset, pC-
10180 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
10190 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
101a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
101b0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
101c0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
101d0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
101e0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
101f0 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a   zEndHdr = (u8 *
10200 29 26 7a 44 61 74 61 5b 6f 66 66 73 65 74 5d 3b  )&zData[offset];
10210 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20  .    zIdx = (u8 
10220 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 53 7a  *)&zData[szHdrSz
10230 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20  ];..    /* Scan 
10240 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75  the header and u
10250 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e  se it to fill in
10260 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64   the aType[] and
10270 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a   aOffset[].    *
10280 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65  * arrays.  aType
10290 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
102a0 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65   the type intege
102b0 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20  r for the i-th. 
102c0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64     ** column and
102d0 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c   aOffset[i] will
102e0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66   contain the off
102f0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
10300 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66  inning.    ** of
10310 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74   the record to t
10320 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
10330 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74  data for the i-t
10340 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a  h column.    */.
10350 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
10360 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  Field; i++){.   
10370 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64     if( zIdx<zEnd
10380 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Hdr ){.        a
10390 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73  Offset[i] = offs
103a0 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49 64 78  et;.        zIdx
103b0 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28   += getVarint32(
103c0 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b  zIdx, aType[i]);
103d0 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20  .        offset 
103e0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
103f0 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
10400 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  e[i]);.      }el
10410 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
10420 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
10430 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
10440 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65  ere are less fie
10450 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
10460 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
10470 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
10480 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
10490 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
104a0 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
104b0 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
104c0 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
104d0 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
104e0 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
104f0 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
10500 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
10510 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
10520 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20  tore a NULL.    
10530 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
10540 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20  f deserializing 
10550 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
10560 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20   record..       
10570 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66   */.        aOff
10580 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20  set[i] = 0;.    
10590 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
105a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
105b0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
105c0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
105d0 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49  _Null;..    /* I
105e0 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
105f0 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
10600 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
10610 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
10620 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74  ,.    ** or if t
10630 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
10640 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
10650 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20   to be past the 
10660 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  end of the.    *
10670 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
10680 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
10690 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
106a0 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
106b0 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66  he end.    ** of
106c0 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
106d0 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
106e0 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
106f0 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
10700 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
10710 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
10720 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a      */.    if( z
10730 49 64 78 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Idx>zEndHdr || o
10740 66 66 73 65 74 3e 70 61 79 6c 6f 61 64 53 69 7a  ffset>payloadSiz
10750 65 20 0a 20 20 20 20 20 7c 7c 20 28 7a 49 64 78  e .     || (zIdx
10760 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
10770 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
10780 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
10790 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
107a0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
107b0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
107c0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
107d0 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
107e0 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
107f0 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
10800 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
10810 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
10820 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
10830 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
10840 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
10850 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
10860 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
10870 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
10880 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
10890 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
108a0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
108b0 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
108c0 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
108d0 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
108e0 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
108f0 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
10900 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
10910 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
10920 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
10930 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
10940 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10950 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
10960 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73  (pDest);.      s
10970 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
10980 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b  Get((u8 *)&zRec[
10990 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54  aOffset[p2]], aT
109a0 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
109b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
109c0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
109d0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
109e0 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20  (aType[p2]);.   
109f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10a00 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
10a10 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
10a20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
10a30 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
10a40 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
10a50 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
10a60 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
10a70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
10a80 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
10a90 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
10aa0 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
10ab0 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20   = sMem.z;.     
10ac0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
10ad0 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61  alGet((u8*)zData
10ae0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
10af0 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  st);.    }.    p
10b00 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
10b10 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ding;.  }else{. 
10b20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
10b30 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20  pe==P4_MEM ){.  
10b40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10b50 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
10b60 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
10b70 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
10b80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10b90 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
10ba0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
10bb0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
10bc0 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
10bd0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
10be0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
10bf0 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a  data (in the.  *
10c00 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
10c10 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c  FromBtree() call
10c20 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61   above) then tra
10c30 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66  nsfer control of
10c40 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d   that.  ** dynam
10c50 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
10c60 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
10c70 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
10c80 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72  re..  ** This pr
10c90 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
10ca0 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  copy..  */.  if(
10cb0 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
10cc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65  .    assert( sMe
10cd0 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  m.z==sMem.zMallo
10ce0 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
10cf0 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
10d00 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10d10 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
10d20 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
10d30 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c  Blob|MEM_Str)) |
10d40 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
10d50 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  .z );.    pDest-
10d60 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
10d70 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
10d80 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  );.    pDest->fl
10d90 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
10da0 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20  .    pDest->z = 
10db0 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73  sMem.z;.    pDes
10dc0 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65  t->zMalloc = sMe
10dd0 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a  m.zMalloc;.  }..
10de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
10df0 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
10e00 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63  le(pDest);..op_c
10e10 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
10e20 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
10e30 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
10e40 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10e50 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
10e60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10e70 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
10e80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70   * P4 *.**.** Ap
10e90 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
10ea0 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
10eb0 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
10ec0 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
10ed0 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
10ee0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
10ef0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
10f00 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
10f10 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
10f20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
10f30 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
10f40 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
10f50 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
10f60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
10f70 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
10f80 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
10f90 7b 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  {.  char *zAffin
10fa0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
10fb0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 20 3d  .  Mem *pData0 =
10fc0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
10fd0 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74  1];.  Mem *pLast
10fe0 20 3d 20 26 70 44 61 74 61 30 5b 70 4f 70 2d 3e   = &pData0[pOp->
10ff0 70 32 2d 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70 52  p2-1];.  Mem *pR
11000 65 63 3b 0a 0a 20 20 66 6f 72 28 70 52 65 63 3d  ec;..  for(pRec=
11010 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
11020 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
11030 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65    ExpandBlob(pRe
11040 63 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  c);.    applyAff
11050 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
11060 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
11070 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
11080 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11090 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
110a0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
110b0 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74   *.**.** Convert
110c0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
110d0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
110e0 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e  into a single en
110f0 74 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20  try.** suitable 
11100 66 6f 72 20 75 73 65 20 61 73 20 61 20 64 61 74  for use as a dat
11110 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
11120 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
11130 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
11140 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65  n index.  The de
11150 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66 6f 72  tails of the for
11160 6d 61 74 20 61 72 65 20 69 72 72 65 6c 65 76 61  mat are irreleva
11170 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a  nt as long as.**
11180 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
11190 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
111a0 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
111b0 72 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 73  r..** Refer to s
111c0 6f 75 72 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65  ource code comme
111d0 6e 74 73 20 66 6f 72 20 74 68 65 20 64 65 74 61  nts for the deta
111e0 69 6c 73 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ils of the recor
111f0 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a  d.** format..**.
11200 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
11210 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
11220 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
11230 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
11240 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
11250 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
11260 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
11270 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
11280 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
11290 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
112a0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
112b0 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
112c0 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
112d0 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
112e0 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
112f0 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
11300 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
11310 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
11320 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
11330 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
11340 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
11350 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
11360 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
11370 64 3a 20 7b 0a 20 20 2f 2a 20 41 73 73 75 6d 69  d: {.  /* Assumi
11380 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
11390 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
113a0 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
113b0 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
113c0 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
113d0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
113e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
113f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
11420 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
11430 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
11440 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
11450 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
11460 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
11470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114b0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
114c0 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
114d0 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
114e0 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
114f0 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
11500 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
11510 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a   so froth..  **.
11520 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
11530 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
11540 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
11550 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
11560 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
11570 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
11580 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
11590 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
115a0 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
115b0 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
115c0 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
115d0 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
115e0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
115f0 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
11600 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
11610 2e 0a 20 20 2a 2f 0a 20 20 75 38 20 2a 7a 4e 65  ..  */.  u8 *zNe
11620 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
11630 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
11640 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
11650 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
11660 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
11670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11680 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
11690 0a 20 20 75 36 34 20 6e 44 61 74 61 20 3d 20 30  .  u64 nData = 0
116a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
116b0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
116c0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
116d0 69 6e 74 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  int nHdr = 0;   
116e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
116f0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
11700 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
11710 36 34 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20  64 nByte = 0;   
11720 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
11730 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
11740 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
11750 20 20 69 6e 74 20 6e 5a 65 72 6f 20 3d 20 30 3b    int nZero = 0;
11760 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11770 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
11780 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
11790 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
117a0 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
117b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
117c0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
117d0 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
117e0 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
117f0 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
11800 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
11810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
11820 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
11830 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
11840 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
11850 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
11860 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
11870 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
11880 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
11890 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
118a0 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
118b0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
118c0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
118d0 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
118e0 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
118f0 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
11900 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
11910 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
11920 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
11930 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
11940 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
11950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
11960 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
11970 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 0a 20 20  wRecord[] */..  
11980 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
11990 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
119a0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
119b0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
119c0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
119d0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d  p->p2+nField<=p-
119e0 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61  >nMem+1 );.  pDa
119f0 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 6e  ta0 = &p->aMem[n
11a00 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
11a10 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
11a20 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
11a30 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
11a40 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
11a50 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
11a60 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
11a70 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
11a80 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
11a90 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
11aa0 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
11ab0 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
11ac0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
11ad0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
11ae0 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70   */.  for(pRec=p
11af0 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
11b00 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
11b10 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20 69 66   int len;.    if
11b20 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
11b30 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
11b40 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69  ty(pRec, zAffini
11b50 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c  ty[pRec-pData0],
11b60 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
11b70 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  }.    if( pRec->
11b80 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26  flags&MEM_Zero &
11b90 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20  & pRec->n>0 ){. 
11ba0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11bb0 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52  MemExpandBlob(pR
11bc0 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ec);.    }.    s
11bd0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
11be0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
11bf0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
11c00 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d  rmat);.    len =
11c10 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
11c20 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c  alTypeLen(serial
11c30 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74  _type);.    nDat
11c40 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48  a += len;.    nH
11c50 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72  dr += sqlite3Var
11c60 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
11c70 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
11c80 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
11c90 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ero ){.      /* 
11ca0 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66  Only pure zero-f
11cb0 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20  illed BLOBs can 
11cc0 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73  be input to this
11cd0 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a   Opcode..      *
11ce0 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f  * We do not allo
11cf0 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70  w blobs with a p
11d00 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f  refix and a zero
11d10 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f  -filled tail. */
11d20 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20  .      nZero += 
11d30 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
11d40 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e     }else if( len
11d50 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   ){.      nZero 
11d60 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  = 0;.    }.  }..
11d70 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69    /* Add the ini
11d80 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69  tial header vari
11d90 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65  nt and total the
11da0 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20   size */.  nHdr 
11db0 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c  += nVarint = sql
11dc0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
11dd0 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69  dr);.  if( nVari
11de0 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
11df0 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20  Len(nHdr) ){.   
11e00 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
11e10 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
11e20 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e  a-nZero;.  if( n
11e30 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
11e40 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11e50 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
11e60 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
11e70 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
11e80 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
11e90 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
11ea0 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
11eb0 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
11ec0 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
11ed0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
11ee0 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
11ef0 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
11f00 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
11f10 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
11f20 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
11f30 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
11f40 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
11f50 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f  Grow() could clo
11f60 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
11f70 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
11f80 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
11f90 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
11fa0 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
11fb0 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
11fc0 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
11fd0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
11fe0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
11ff0 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
12000 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20  )nByte, 0) ){.  
12010 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
12020 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
12030 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
12040 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
12050 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
12060 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
12070 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
12080 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
12090 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
120a0 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72  pRec++){.    ser
120b0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
120c0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
120d0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
120e0 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
120f0 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
12100 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
12110 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20  _type);      /* 
12120 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
12130 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
12140 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
12150 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20  t; pRec++){  /* 
12160 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20  serial data */. 
12170 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56     i += sqlite3V
12180 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
12190 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e  ewRecord[i], (in
121a0 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65  t)(nByte-i), pRe
121b0 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  c,file_format);.
121c0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d    }.  assert( i=
121d0 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
121e0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
121f0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
12200 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  em );.  pOut->n 
12210 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
12220 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12230 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
12240 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
12250 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
12260 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
12270 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
12280 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
12290 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
122a0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
122b0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
122c0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
122d0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
122e0 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
122f0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
12300 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
12310 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
12320 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
12330 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12340 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
12350 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
12360 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
12370 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
12380 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
12390 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
123a0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
123b0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
123c0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
123d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
123e0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
123f0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
12400 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
12410 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
12420 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
12430 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
12440 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73  [pOp->p1]->pCurs
12450 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  or;.  rc = sqlit
12460 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
12470 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
12480 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12490 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75  M_Int;.  pOut->u
124a0 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
124b0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
124c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65  /* Opcode: State
124d0 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ment P1 * * * *.
124e0 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69  **.** Begin an i
124f0 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d  ndividual statem
12500 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
12510 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f 66  which is part of
12520 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61   a larger.** tra
12530 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  nsaction.  This 
12540 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61  is needed so tha
12550 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  t the statement.
12560 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64  ** can be rolled
12570 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
12580 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
12590 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
125a0 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
125b0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
125c0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
125d0 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f  action will auto
125e0 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d  matically.** com
125f0 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
12600 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
12610 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
12620 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
12630 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f  rently in autoco
12640 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20  mmit mode (that 
12650 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69  .** is to say, i
12660 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77 65  f it is in betwe
12670 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d  en BEGIN and COM
12680 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74  MIT).** and if t
12690 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65  here are no othe
126a0 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  r active stateme
126b0 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  nts on the same 
126c0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
126d0 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69  ection, then thi
126e0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61  s operation is a
126f0 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74   no-op.  No stat
12700 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
12710 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73  n.** is needed s
12720 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63  ince any error c
12730 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  an use the norma
12740 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65  l ROLLBACK proce
12750 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68  ss to.** undo ch
12760 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anges..**.** If 
12770 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
12780 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
12790 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65  ed, then a state
127a0 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  ment journal fil
127b0 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c  e.** will be all
127c0 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69  ocated and initi
127d0 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  alized..**.** Th
127e0 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62  e statement is b
127f0 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  egun on the data
12800 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20 69  base file with i
12810 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61  ndex P1.  The ma
12820 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  in.** database f
12830 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78  ile has an index
12840 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66 69   of 0 and the fi
12850 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
12860 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20  orary tables.** 
12870 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
12880 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  1..*/.case OP_St
12890 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66 28  atement: {.  if(
128a0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
128b0 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
128c0 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
128d0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
128e0 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  ;.    Btree *pBt
128f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3e  ;.    assert( i>
12900 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20  =0 && i<db->nDb 
12910 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  );.    assert( d
12920 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d 30  b->aDb[i].pBt!=0
12930 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62   );.    pBt = db
12940 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
12950 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
12960 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
12970 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73 65  pBt) );.    asse
12980 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
12990 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29  k & (1<<i))!=0 )
129a0 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74  ;.    if( !sqlit
129b0 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d 74 28  e3BtreeIsInStmt(
129c0 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 72 63  pBt) ){.      rc
129d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
129e0 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a 20  eginStmt(pBt);. 
129f0 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64 53 74       p->openedSt
12a00 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20 20 20  atement = 1;.   
12a10 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
12a20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  }../* Opcode: Sa
12a30 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
12a40 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
12a50 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
12a60 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
12a70 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
12a80 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
12a90 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
12aa0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
12ab0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
12ac0 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
12ad0 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
12ae0 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
12af0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
12b00 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
12b10 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
12b20 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
12b30 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
12b40 20 7b 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f   {.  int p1 = pO
12b50 70 2d 3e 70 31 3b 0a 20 20 63 68 61 72 20 2a 7a  p->p1;.  char *z
12b60 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
12b70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
12b80 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
12b90 2f 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  /..  /* Assert t
12ba0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
12bb0 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
12bc0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
12bd0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
12be0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
12bf0 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
12c00 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
12c10 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
12c20 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
12c30 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
12c40 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
12c50 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
12c60 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
12c70 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
12c80 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
12c90 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
12ca0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
12cb0 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
12cc0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
12cd0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
12ce0 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
12cf0 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
12d00 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
12d10 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
12d20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56    if( db->writeV
12d30 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
12d40 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
12d50 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
12d60 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
12d70 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
12d80 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
12d90 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
12da0 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
12db0 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
12dc0 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
12dd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
12de0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
12df0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
12e00 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
12e10 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
12e20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
12e30 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
12e40 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
12e50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
12e60 20 20 20 69 6e 74 20 6e 4e 61 6d 65 20 3d 20 73     int nName = s
12e70 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
12e80 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 53 61 76  Name);.      Sav
12e90 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 0a 20  epoint *pNew;.. 
12ea0 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
12eb0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
12ec0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
12ed0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
12ee0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
12ef0 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
12f00 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
12f10 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
12f20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
12f30 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
12f40 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
12f50 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
12f60 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
12f70 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
12f80 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
12f90 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
12fa0 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
12fb0 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
12fc0 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
12fd0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
12fe0 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
12ff0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
13000 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
13010 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
13020 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
13030 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
13040 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
13050 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13060 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
13070 70 6f 69 6e 74 2b 2b 3b 0a 09 7d 0a 20 20 20 20  point++;..}.    
13080 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
13090 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
130a0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
130b0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
130c0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
130d0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
130e0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
130f0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
13100 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
13110 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
13120 65 7b 0a 20 20 20 20 53 61 76 65 70 6f 69 6e 74  e{.    Savepoint
13130 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
13140 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
13150 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
13160 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
13170 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
13180 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
13190 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
131a0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
131b0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
131c0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
131d0 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
131e0 70 6f 69 6e 74 3d 64 62 2d 3e 70 53 61 76 65 70  point=db->pSavep
131f0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
13200 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
13210 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
13220 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
13230 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
13240 70 6f 69 6e 74 3d 70 53 61 76 65 70 6f 69 6e 74  point=pSavepoint
13250 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
13260 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
13270 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
13280 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
13290 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
132a0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
132b0 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
132c0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
132d0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
132e0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
132f0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
13300 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69  .        db->wri
13310 74 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28  teVdbeCnt>0 || (
13320 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
13330 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63  LLBACK && db->ac
13340 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a  tiveVdbeCnt>1) .
13350 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
13360 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
13370 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
13380 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
13390 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
133a0 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
133b0 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
133c0 73 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  s. It is not pos
133d0 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63  sible to rollbac
133e0 6b 20 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20  k a savepoint.  
133f0 20 20 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20      ** if there 
13400 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 73  are any active s
13410 74 61 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c  tatements at all
13420 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
13430 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
13440 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
13450 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  b, .        "can
13460 6e 6f 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74  not %s savepoint
13470 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
13480 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a  s in progress",.
13490 20 20 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56          (p1==SAV
134a0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
134b0 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72  ? "rollback": "r
134c0 65 6c 65 61 73 65 22 29 0a 20 20 20 20 20 20 29  elease").      )
134d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
134e0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
134f0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
13500 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
13510 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
13520 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
13530 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
13540 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
13550 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
13560 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
13570 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
13580 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
13590 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
135a0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
135b0 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
135c0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
135d0 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
135e0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
135f0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
13600 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
13610 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
13620 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
13630 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
13640 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
13650 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
13660 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
13670 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
13680 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
13690 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
136a0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
136b0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
136c0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
136d0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
136e0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
136f0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
13700 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
13710 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
13720 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
13730 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13740 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
13750 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
13760 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
13770 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
13780 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
13790 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
137a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
137b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
137c0 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
137d0 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
137e0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
137f0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
13800 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13810 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
13820 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
13830 0a 09 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  ..  }.        }.
13840 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
13850 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
13860 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
13870 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
13880 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
13890 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
138a0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
138b0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
138c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
138d0 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
138e0 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  (db, 0);.       
138f0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
13900 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
13910 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
13920 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
13930 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
13940 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
13950 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
13960 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
13970 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
13980 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
13990 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
139a0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
139b0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
139c0 20 20 20 20 20 53 61 76 65 70 6f 69 6e 74 20 2a       Savepoint *
139d0 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
139e0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
139f0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
13a00 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
13a10 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
13a20 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
13a30 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
13a40 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
13a50 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
13a60 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
13a70 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
13a80 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
13a90 70 65 72 61 74 65 64 20 6f 6e 20 74 6f 6f 20 2a  perated on too *
13aa0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
13ab0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
13ac0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
13ad0 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
13ae0 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
13af0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
13b00 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
13b10 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
13b20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
13b30 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
13b40 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
13b50 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
13b60 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
13b70 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
13b80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13b90 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
13ba0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13bb0 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
13bc0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
13bd0 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
13be0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
13bf0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
13c00 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
13c10 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
13c20 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
13c30 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
13c40 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
13c50 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
13c60 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
13c70 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
13c80 65 6e 20 74 68 65 20 43 4f 4d 4d 49 54 20 6f 72  en the COMMIT or
13c90 20 52 4f 4c 4c 42 41 43 4b 20 73 74 61 74 65 6d   ROLLBACK statem
13ca0 65 6e 74 20 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a  ent fails..**.**
13cb0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
13cc0 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
13cd0 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
13ce0 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
13cf0 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
13d00 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
13d10 3e 70 31 3b 0a 20 20 69 6e 74 20 72 6f 6c 6c 62  >p1;.  int rollb
13d20 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
13d30 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 20 3d 20   int turnOnAC = 
13d40 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
13d50 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
13d60 6d 6d 69 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  mmit;..  assert(
13d70 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
13d80 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
13d90 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
13da0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
13db0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
13dc0 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  || rollback==0 )
13dd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  ;..  assert( db-
13de0 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30  >activeVdbeCnt>0
13df0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
13e00 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
13e10 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28  active */..  if(
13e20 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c   turnOnAC && rol
13e30 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74  lback && db->act
13e40 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
13e50 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
13e60 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
13e70 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
13e80 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
13e90 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
13ea0 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
13eb0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
13ec0 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
13ed0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
13ee0 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
13ef0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
13f00 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
13f10 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
13f20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
13f30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
13f40 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
13f50 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
13f60 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
13f70 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
13f80 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
13f90 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
13fa0 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  lse if( turnOnAC
13fb0 20 26 26 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26   && !rollback &&
13fc0 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
13fd0 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  t>1 ){.    /* If
13fe0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
13ff0 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
14000 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
14010 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
14020 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
14030 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
14040 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
14050 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
14060 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
14070 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
14080 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14090 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
140a0 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
140b0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
140c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
140d0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
140e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
140f0 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
14100 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
14110 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
14120 74 20 29 7b 0a 20 20 20 20 69 66 28 20 72 6f 6c  t ){.    if( rol
14130 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
14140 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
14150 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
14160 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
14170 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20  backAll(db);.   
14180 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
14190 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
141a0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
141b0 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
141c0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
141d0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
141e0 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
141f0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
14200 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
14210 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
14220 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
14230 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
14240 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
14250 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
14260 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
14270 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
14280 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14290 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53     sqlite3CloseS
142a0 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20  avepoints(db);. 
142b0 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51     if( p->rc==SQ
142c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
142d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e   rc = SQLITE_DON
142e0 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  E;.    }else{.  
142f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
14300 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20  ERROR;.    }.   
14310 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
14320 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
14330 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14340 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14350 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69  ,.        (!desi
14360 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22  redAutoCommit)?"
14370 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74  cannot start a t
14380 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69  ransaction withi
14390 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
143a0 3a 28 0a 20 20 20 20 20 20 20 20 28 72 6f 6c 6c  :(.        (roll
143b0 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
143c0 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
143d0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
143e0 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
143f0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
14400 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
14410 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
14420 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
14430 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
14440 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61  RROR;.  }.  brea
14450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14460 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
14470 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
14480 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
14490 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63  on.  The transac
144a0 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61  tion ends when a
144b0 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62   Commit or Rollb
144c0 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73  ack.** opcode is
144d0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44   encountered.  D
144e0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
144f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74  ON CONFLICT sett
14500 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e  ing, the.** tran
14510 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c  saction might al
14520 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  so be rolled bac
14530 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73  k if an error is
14540 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a   encountered..**
14550 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
14560 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
14570 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
14580 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
14590 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
145a0 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
145b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
145c0 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
145d0 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
145e0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
145f0 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
14600 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
14610 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
14620 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
14630 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  es..**.** If P2 
14640 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
14650 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
14660 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
14670 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f  .  A RESERVED lo
14680 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65  ck is.** obtaine
14690 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
146a0 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72  e file when a wr
146b0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
146c0 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a  is started.  No.
146d0 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ** other process
146e0 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68   can start anoth
146f0 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  er write transac
14700 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20  tion while this 
14710 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
14720 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61  * underway.  Sta
14730 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72  rting a write tr
14740 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63  ansaction also c
14750 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63  reates a rollbac
14760 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20  k journal. A.** 
14770 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
14780 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
14790 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61  d before any cha
147a0 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
147b0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
147c0 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 32  ase.  If P2 is 2
147d0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65 6e   or greater then
147e0 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   an EXCLUSIVE lo
147f0 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69  ck is also obtai
14800 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69  ned.** on the fi
14810 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  le..**.** If P2 
14820 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
14830 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74  read-lock is obt
14840 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74  ained on the dat
14850 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63  abase file..*/.c
14860 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
14870 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  on: {.  int i = 
14880 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65 65  pOp->p1;.  Btree
14890 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
148a0 28 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e  ( i>=0 && i<db->
148b0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
148c0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
148d0 20 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20   (1<<i))!=0 );. 
148e0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69   pBt = db->aDb[i
148f0 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
14900 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
14910 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
14920 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
14930 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
14940 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
14950 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
14960 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
14970 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
14980 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
14990 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
149a0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
149b0 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49  E_OK && rc!=SQLI
149c0 54 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26  TE_READONLY /* &
149d0 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  & rc!=SQLITE_BUS
149e0 59 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f  Y */ ){.      go
149f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
14a00 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
14a10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14a20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
14a30 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
14a40 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
14a50 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
14a60 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
14a70 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
14a80 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
14a90 33 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68 65  3==0 is the sche
14aa0 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
14ab0 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
14ac0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
14ad0 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==2 is the recom
14ae0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
14af0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
14b00 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
14b10 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
14b20 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
14b30 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
14b40 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
14b50 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
14b60 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
14b70 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 65 67 61  ** If P1 is nega
14b80 74 69 76 65 2c 20 74 68 65 6e 20 74 68 69 73 20  tive, then this 
14b90 69 73 20 61 20 72 65 71 75 65 73 74 20 74 6f 20  is a request to 
14ba0 72 65 61 64 20 74 68 65 20 73 69 7a 65 20 6f 66  read the size of
14bb0 20 61 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20   a.** databases 
14bc0 66 72 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d 75  free-list. P3 mu
14bd0 73 74 20 62 65 20 73 65 74 20 74 6f 20 31 20 69  st be set to 1 i
14be0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 54 68 65  n this case. The
14bf0 20 61 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61 62   actual.** datab
14c00 61 73 65 20 61 63 63 65 73 73 65 64 20 69 73 20  ase accessed is 
14c10 28 28 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f 72  ((P1+1)*-1). For
14c20 20 65 78 61 6d 70 6c 65 2c 20 61 20 50 31 20 70   example, a P1 p
14c30 61 72 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a 2a  arameter of -1.*
14c40 2a 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  * corresponds to
14c50 20 64 61 74 61 62 61 73 65 20 30 20 28 22 6d 61   database 0 ("ma
14c60 69 6e 22 29 2c 20 61 20 50 31 20 6f 66 20 2d 32  in"), a P1 of -2
14c70 20 69 73 20 64 61 74 61 62 61 73 65 20 31 20 28   is database 1 (
14c80 22 74 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54  "temp")..**.** T
14c90 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
14ca0 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
14cb0 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
14cc0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
14cd0 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
14ce0 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
14cf0 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
14d00 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
14d10 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
14d20 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
14d30 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
14d40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
14d50 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
14d60 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  se */.  int iMet
14d70 61 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70  a;.  int iDb = p
14d80 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69 43  Op->p1;.  int iC
14d90 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
14da0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
14db0 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
14dc0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66 28  EE_META );.  if(
14dd0 20 69 44 62 3c 30 20 29 7b 0a 20 20 20 20 69 44   iDb<0 ){.    iD
14de0 62 20 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29 29  b = (-1*(iDb+1))
14df0 3b 0a 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a 3d  ;.    iCookie *=
14e00 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72   -1;.  }.  asser
14e10 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
14e20 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
14e30 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
14e40 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
14e50 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
14e60 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
14e70 21 3d 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65 20  !=0 );.  /* The 
14e80 69 6e 64 65 78 69 6e 67 20 6f 66 20 6d 65 74 61  indexing of meta
14e90 20 76 61 6c 75 65 73 20 61 74 20 74 68 65 20 73   values at the s
14ea0 63 68 65 6d 61 20 6c 61 79 65 72 20 69 73 20 6f  chema layer is o
14eb0 66 66 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a 20  ff by one from. 
14ec0 20 2a 2a 20 74 68 65 20 69 6e 64 65 78 69 6e 67   ** the indexing
14ed0 20 69 6e 20 74 68 65 20 62 74 72 65 65 20 6c 61   in the btree la
14ee0 79 65 72 2e 20 20 54 68 65 20 62 74 72 65 65 20  yer.  The btree 
14ef0 63 6f 6e 73 69 64 65 72 73 20 6d 65 74 61 5b 30  considers meta[0
14f00 5d 20 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68 65  ] to.  ** be the
14f10 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65 20   number of free 
14f20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
14f30 61 62 61 73 65 20 28 61 20 72 65 61 64 2d 6f 6e  abase (a read-on
14f40 6c 79 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20 61  ly value).  ** a
14f50 6e 64 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65  nd meta[1] to be
14f60 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
14f70 69 65 2e 20 20 54 68 65 20 73 63 68 65 6d 61 20  ie.  The schema 
14f80 6c 61 79 65 72 20 63 6f 6e 73 69 64 65 72 73 0a  layer considers.
14f90 20 20 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f 20    ** meta[1] to 
14fa0 62 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  be the schema co
14fb0 6f 6b 69 65 2e 20 20 53 6f 20 77 65 20 68 61 76  okie.  So we hav
14fc0 65 20 74 6f 20 73 68 69 66 74 20 74 68 65 20 69  e to shift the i
14fd0 6e 64 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e 65  ndex.  ** by one
14fe0 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
14ff0 67 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  g statement..  *
15000 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
15010 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
15020 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 31  >aDb[iDb].pBt, 1
15030 20 2b 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32   + iCookie, (u32
15040 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
15050 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
15060 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
15070 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
15080 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15090 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
150a0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
150b0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
150c0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
150d0 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
150e0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
150f0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
15100 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
15110 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50  atabase P1..** P
15120 32 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68 65  2==0 is the sche
15130 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d  ma version.  P2=
15140 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
15150 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32  se format..** P2
15160 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==2 is the recom
15170 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
15180 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
15190 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
151a0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
151b0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
151c0 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
151d0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
151e0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
151f0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
15200 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
15210 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
15220 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
15230 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
15240 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
15250 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kie: {       /* 
15260 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  in3 */.  Db *pDb
15270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
15280 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p2<SQLITE_N_BTR
15290 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
152a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
152b0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
152c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
152d0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
152e0 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
152f0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
15300 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
15310 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
15320 74 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  t!=0 );.  sqlite
15330 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
15340 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
15350 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
15360 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
15370 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
15380 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
15390 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
153a0 44 62 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e  Db->pBt, 1+pOp->
153b0 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  p2, (int)pIn3->u
153c0 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
153d0 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  p2==0 ){.    /* 
153e0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
153f0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
15400 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
15410 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
15420 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
15430 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
15440 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
15450 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
15460 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
15470 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
15480 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
15490 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  ==1 ){.    /* Re
154a0 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
154b0 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
154c0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
154d0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
154e0 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
154f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
15500 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
15510 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
15520 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
15530 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
15540 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
15550 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
15560 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
15570 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
15580 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
15590 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
155a0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
155b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65  }../* Opcode: Ve
155c0 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32  rifyCookie P1 P2
155d0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
155e0 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62  he value of glob
155f0 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61  al database para
15600 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28  meter number 0 (
15610 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65  the.** schema ve
15620 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20  rsion) and make 
15630 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c  sure it is equal
15640 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20   to P2.  .** P1 
15650 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
15660 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
15670 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  0 for the main d
15680 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
15690 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69  and 1 for the fi
156a0 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f  le holding tempo
156b0 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
156c0 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62  some higher numb
156d0 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69  er.** for auxili
156e0 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  ary databases..*
156f0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  *.** The cookie 
15700 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
15710 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
15720 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
15730 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
15740 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
15750 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
15760 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
15770 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
15780 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
15790 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
157a0 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
157b0 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45   schema..**.** E
157c0 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
157d0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76  ion needs to hav
157e0 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f  e been started o
157f0 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65  r an OP_Open nee
15800 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63  ds.** to be exec
15810 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69  uted (to establi
15820 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20  sh a read lock) 
15830 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f  before this opco
15840 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  de is.** invoked
15850 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72  ..*/.case OP_Ver
15860 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69  ifyCookie: {.  i
15870 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65  nt iMeta;.  Btre
15880 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74  e *pBt;.  assert
15890 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
158a0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
158b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
158c0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
158d0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
158e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
158f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
15900 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
15910 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15920 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 31 2c  eGetMeta(pBt, 1,
15930 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
15940 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
15950 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
15960 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d    iMeta = 0;.  }
15970 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
15980 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d 70  E_OK && iMeta!=p
15990 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71  Op->p2 ){.    sq
159a0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
159b0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
159c0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
159d0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
159e0 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
159f0 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
15a00 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
15a10 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
15a20 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
15a30 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
15a40 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
15a50 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
15a60 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
15a70 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
15a80 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
15a90 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
15aa0 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
15ab0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
15ac0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
15ad0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
15ae0 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
15af0 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
15b00 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
15b10 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
15b20 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
15b30 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
15b40 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
15b50 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
15b60 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
15b70 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
15b80 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
15b90 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
15ba0 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
15bb0 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
15bc0 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
15bd0 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
15be0 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
15bf0 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
15c00 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
15c10 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
15c20 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
15c30 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
15c40 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
15c50 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
15c60 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
15c70 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
15c80 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
15c90 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
15ca0 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
15cb0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
15cc0 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
15cd0 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
15ce0 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
15cf0 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
15d00 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
15d10 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
15d20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
15d30 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70  rnalSchema(db, p
15d40 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a  Op->p1);.    }..
15d50 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
15d60 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
15d70 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20  nts(db);.    rc 
15d80 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
15d90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
15da0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
15db0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
15dc0 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
15dd0 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
15de0 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
15df0 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
15e00 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
15e10 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
15e20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
15e30 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
15e40 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
15e50 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
15e60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
15e70 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
15e80 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
15e90 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
15ea0 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
15eb0 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
15ec0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
15ed0 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
15ee0 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
15ef0 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
15f00 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
15f10 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
15f20 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
15f30 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
15f40 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
15f50 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
15f60 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
15f70 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
15f80 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
15f90 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
15fa0 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
15fb0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
15fc0 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
15fd0 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
15fe0 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
15ff0 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
16000 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
16010 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
16020 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
16030 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
16040 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
16050 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
16060 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
16070 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
16080 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
16090 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
160a0 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
160b0 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
160c0 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
160d0 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
160e0 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
160f0 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
16100 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
16110 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
16120 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
16130 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
16140 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
16150 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
16160 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
16170 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
16180 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
16190 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
161a0 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
161b0 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
161c0 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
161d0 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
161e0 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
161f0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
16200 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
16210 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
16220 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
16230 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
16240 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
16250 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
16260 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
16270 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
16280 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
16290 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
162a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
162b0 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
162c0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
162d0 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
162e0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
162f0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
16300 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
16310 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
16320 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16330 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
16340 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
16350 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
16360 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
16370 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
16380 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
16390 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
163a0 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
163b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
163c0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
163d0 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
163e0 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
163f0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
16400 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
16410 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
16420 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
16430 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
16440 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
16450 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
16460 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
16470 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
16480 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
16490 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
164a0 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
164b0 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
164c0 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
164d0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
164e0 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
164f0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
16500 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
16510 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
16520 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
16530 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
16540 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
16550 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
16560 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
16570 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
16580 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
16590 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
165a0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
165b0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
165c0 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
165d0 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
165e0 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
165f0 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
16600 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
16610 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
16620 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
16630 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
16640 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
16650 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
16660 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
16670 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
16680 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
16690 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 4b 65 79  Field = 0;.  Key
166a0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d  Info *pKeyInfo =
166b0 20 30 3b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   0;.  int i = pO
166c0 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20  p->p1;.  int p2 
166d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74  = pOp->p2;.  int
166e0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
166f0 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
16700 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
16710 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
16720 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61   Db *pDb;.  .  a
16730 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
16740 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
16750 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
16760 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
16770 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  b))!=0 );.  pDb 
16780 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
16790 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
167a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
167b0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
167c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
167d0 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c  rite ){.    wrFl
167e0 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20  ag = 1;.    if( 
167f0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
16800 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
16810 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
16820 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
16830 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
16840 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
16850 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
16860 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
16870 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
16880 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
16890 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
168a0 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
168b0 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ( p2<=p->nMem );
168c0 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e  .    pIn2 = &p->
168d0 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71  aMem[p2];.    sq
168e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
168f0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
16900 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
16910 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70  ->u.i;.    if( p
16920 32 3c 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63  2<2 ) {.      rc
16930 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
16940 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
16950 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16960 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
16970 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
16980 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
16990 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
169a0 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
169b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
169c0 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66  nfo;.    pKeyInf
169d0 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
169e0 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  db);.    nField 
169f0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
16a00 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ld+1;.  }else if
16a10 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
16a20 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
16a30 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
16a40 69 3b 0a 20 20 7d 0a 20 20 70 43 75 72 20 3d 20  i;.  }.  pCur = 
16a50 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
16a60 2c 20 69 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  , i, nField, iDb
16a70 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
16a80 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
16a90 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
16aa0 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ow = 1;.  rc = s
16ab0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
16ac0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
16ad0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
16ae0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
16af0 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
16b00 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69 74  KeyInfo;..  swit
16b10 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61  ch( rc ){.    ca
16b20 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20  se SQLITE_BUSY: 
16b30 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
16b40 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
16b50 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
16b60 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
16b70 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16b80 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
16b90 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e  E_OK: {.      in
16ba0 74 20 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65  t flags = sqlite
16bb0 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 75 72  3BtreeFlags(pCur
16bc0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
16bd0 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
16be0 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20  king.  Only the 
16bf0 6c 6f 77 65 72 20 66 6f 75 72 20 62 69 74 73 20  lower four bits 
16c00 6f 66 20 74 68 65 20 66 6c 61 67 73 20 62 79 74  of the flags byt
16c10 65 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a  e should.      *
16c20 2a 20 62 65 20 75 73 65 64 2e 20 20 42 69 74 20  * be used.  Bit 
16c30 33 20 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73  3 (mask 0x08) is
16c40 20 75 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20   unpredictable. 
16c50 20 54 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74   The lower 3 bit
16c60 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b  s.      ** (mask
16c70 20 30 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65   0x07) should be
16c80 20 65 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65   either 5 (intke
16c90 79 2b 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74  y+leafdata for t
16ca0 61 62 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20  ables) or.      
16cb0 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66  ** 2 (zerodata f
16cc0 6f 72 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66  or indices).  If
16cd0 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e   these condition
16ce0 73 20 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74  s are not met it
16cf0 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e   can.      ** on
16d00 6c 79 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20  ly mean that we 
16d10 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68  are dealing with
16d20 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
16d30 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a  ase file.      *
16d40 2f 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  /.      if( (fla
16d50 67 73 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c  gs & 0xf0)!=0 ||
16d60 20 28 28 66 6c 61 67 73 20 26 20 30 78 30 37 29   ((flags & 0x07)
16d70 21 3d 35 20 26 26 20 28 66 6c 61 67 73 20 26 20  !=5 && (flags & 
16d80 30 78 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20  0x07)!=2) ){.   
16d90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16da0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
16db0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
16dc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
16de0 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66  ur->isTable = (f
16df0 6c 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54  lags & BTREE_INT
16e00 4b 45 59 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20  KEY)!=0 ?1:0;.  
16e10 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65      pCur->isInde
16e20 78 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52  x = (flags & BTR
16e30 45 45 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30 20  EE_ZERODATA)!=0 
16e40 3f 31 3a 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49  ?1:0;.      /* I
16e50 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e 73  f P4==0 it means
16e60 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65 64   we are expected
16e70 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65   to open a table
16e80 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68 65 6e  .  If P4!=0 then
16e90 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70  .      ** we exp
16ea0 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e  ect to be openin
16eb0 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  g an index.  If 
16ec0 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74  this is not what
16ed0 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20   happened,.     
16ee0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74   ** then the dat
16ef0 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
16f00 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16f10 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62  if( (pCur->isTab
16f20 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70  le && pOp->p4typ
16f30 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a 20  e==P4_KEYINFO). 
16f40 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e        || (pCur->
16f50 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e  isIndex && pOp->
16f60 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
16f70 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  FO) ){.        r
16f80 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
16f90 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
16fa0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16fb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16fc0 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
16fd0 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
16fe0 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20  LITE_EMPTY: {.  
16ff0 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c      pCur->isTabl
17000 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
17010 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20  =P4_KEYINFO;.   
17020 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78     pCur->isIndex
17030 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
17040 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  e;.      pCur->p
17050 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20  Cursor = 0;.    
17060 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
17070 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
17080 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
17090 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  : {.      goto a
170a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
170b0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
170c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
170d0 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
170e0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
170f0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
17100 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
17110 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
17120 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
17130 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
17140 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
17150 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
17160 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
17170 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73  only.  The trans
17180 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a  ient or virtual.
17190 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
171a0 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
171b0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
171c0 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
171d0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
171e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
171f0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
17200 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
17210 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
17220 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
17230 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
17240 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
17250 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
17260 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
17270 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
17280 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
17290 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
172a0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
172b0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
172c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
172d0 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
172e0 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
172f0 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
17300 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
17310 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
17320 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
17330 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
17340 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
17350 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
17360 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
17370 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
17380 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
17390 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
173a0 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
173b0 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
173c0 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
173d0 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
173e0 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
173f0 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  idea..*/.case OP
17400 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
17410 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
17420 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
17430 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
17440 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46   const int openF
17450 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
17460 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
17470 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
17480 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
17490 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
174a0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
174b0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
174c0 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
174d0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
174e0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
174f0 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
17500 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
17510 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c  cateCursor(p, i,
17520 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
17530 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
17540 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17550 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
17560 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
17570 42 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c  BtreeFactory(db,
17580 20 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45   0, 1, SQLITE_DE
17590 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45  FAULT_TEMP_CACHE
175a0 5f 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73  _SIZE, openFlags
175b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43               &pC
175d0 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72  x->pBt);.  if( r
175e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
175f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17600 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
17610 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
17620 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
17630 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
17640 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
17650 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
17660 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
17670 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
17680 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
17690 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
176a0 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20   BTREE_ZERODATA 
176b0 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
176c0 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
176d0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
176e0 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
176f0 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
17700 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
17710 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
17720 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
17730 31 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62  1 (an INTKEY tab
17740 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
17750 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  if( pOp->p4.pKey
17760 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e  Info ){.      in
17770 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
17780 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
17790 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
177a0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
177b0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
177c0 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70  ble(pCx->pBt, &p
177d0 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44  gno, BTREE_ZEROD
177e0 41 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28  ATA); .      if(
177f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
17800 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17810 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
17820 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
17830 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
17840 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
17850 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20  t, pgno, 1, .   
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65               (Ke
17880 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a  yInfo*)pOp->p4.z
17890 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
178a0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
178b0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
178c0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  .pKeyInfo;.     
178d0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
178e0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
178f0 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
17900 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
17910 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
17920 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17930 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
17940 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
17950 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
17960 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
17970 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
17980 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
17990 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78  ->isIndex = !pCx
179a0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65  ->isTable;.  bre
179b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
179c0 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
179d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
179e0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
179f0 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
17a00 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
17a10 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
17a20 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
17a30 61 74 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70  ata.  Any attemp
17a40 74 20 74 6f 20 77 72 69 74 65 20 61 20 73 65 63  t to write a sec
17a50 6f 6e 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20  ond row of data 
17a60 63 61 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69  causes the.** fi
17a70 72 73 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65  rst row to be de
17a80 6c 65 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61  leted.  All data
17a90 20 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e   is deleted when
17aa0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
17ab0 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  * closed..**.** 
17ac0 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
17ad0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
17ae0 70 63 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20  pcode is useful 
17af0 66 6f 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a  for holding the.
17b00 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61  ** NEW or OLD ta
17b10 62 6c 65 73 20 69 6e 20 61 20 74 72 69 67 67 65  bles in a trigge
17b20 72 2e 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f  r.  Also used to
17b30 20 68 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67   hold the a sing
17b40 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
17b50 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
17b60 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
17b70 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
17b80 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
17b90 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
17ba0 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
17bb0 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
17bc0 57 68 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69  When OP_Insert i
17bd0 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e  s executed to in
17be0 73 65 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f  sert a row in to
17bf0 20 74 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c   the pseudo tabl
17c00 65 2c 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  e,.** the pseudo
17c10 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61  -table cursor ma
17c20 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b  y or may not mak
17c30 65 20 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20  e it's own copy 
17c40 6f 66 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  of the.** origin
17c50 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20  al row data. If 
17c60 50 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68  P2 is 0, then th
17c70 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77  e pseudo-table w
17c80 69 6c 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20  ill copy the.** 
17c90 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74  original row dat
17ca0 61 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20  a. Otherwise, a 
17cb0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
17cc0 72 69 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63  riginal memory c
17cd0 65 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  ell.** is stored
17ce0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
17cf0 74 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d  the vdbe program
17d00 20 6d 75 73 74 20 65 6e 73 75 72 65 20 74 68 61   must ensure tha
17d10 74 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  t the .** memory
17d20 20 63 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67   cell containing
17d30 20 74 68 65 20 72 6f 77 20 64 61 74 61 20 69 73   the row data is
17d40 20 6e 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e   not overwritten
17d50 20 75 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73   until the.** ps
17d60 65 75 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c  eudo table is cl
17d70 6f 73 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72  osed (or a new r
17d80 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
17d90 6e 74 6f 20 69 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  nto it)..**.** P
17da0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
17db0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
17dc0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
17dd0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
17de0 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
17df0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
17e00 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
17e10 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
17e20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
17e30 43 78 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  Cx;.  assert( i>
17e40 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
17e50 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
17e60 69 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  i, pOp->p3, -1, 
17e70 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
17e80 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
17e90 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
17ea0 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
17eb0 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  oTable = 1;.  pC
17ec0 78 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  x->ephemPseudoTa
17ed0 62 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ble = (u8)pOp->p
17ee0 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
17ef0 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  e = 1;.  pCx->is
17f00 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65  Index = 0;.  bre
17f10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17f20 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
17f30 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
17f40 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
17f50 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
17f60 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
17f70 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
17f80 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
17f90 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
17fa0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
17fb0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
17fc0 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
17fd0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
17fe0 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
17ff0 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
18000 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 3b  p, p->apCsr[i]);
18010 0a 20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 20 3d  .  p->apCsr[i] =
18020 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
18030 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
18040 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
18050 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
18060 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
18070 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
18080 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
18090 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
180a0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
180b0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
180c0 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
180d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
180e0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
180f0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
18100 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
18110 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
18120 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
18130 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
18140 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
18150 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
18160 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
18170 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
18180 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
18190 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
181a0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
181b0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
181c0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
181d0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
181e0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
181f0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
18200 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
18210 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
18220 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
18230 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
18240 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
18250 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
18260 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
18270 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74  * Opcode: SeekGt
18280 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
18290 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
182a0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
182b0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
182c0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
182d0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
182e0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
182f0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
18300 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
18310 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
18320 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
18330 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
18340 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
18350 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
18360 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
18370 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
18380 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
18390 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
183a0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
183b0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
183c0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
183d0 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
183e0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
183f0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
18400 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
18410 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
18420 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
18430 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
18440 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
18450 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
18460 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
18470 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
18480 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
18490 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
184a0 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
184b0 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72   * .**.** If cur
184c0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
184d0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
184e0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
184f0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
18500 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
18510 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
18520 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
18530 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
18540 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
18550 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
18560 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
18570 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
18580 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
18590 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
185a0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
185b0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
185c0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
185d0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
185e0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
185f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
18600 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
18610 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
18620 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
18630 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
18640 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
18650 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
18660 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
18670 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
18680 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
18690 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
186a0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
186b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
186c0 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Le P1 P2 P3 P4 *
186d0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
186e0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
186f0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
18700 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
18710 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
18720 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
18730 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
18740 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
18750 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
18760 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
18770 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
18780 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
18790 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
187a0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
187b0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
187c0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
187d0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
187e0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
187f0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
18800 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
18810 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
18820 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
18830 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
18840 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
18850 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
18860 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
18870 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
18880 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
18890 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
188a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
188b0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
188c0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
188d0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
188e0 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
188f0 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLt:         /* 
18900 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
18910 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20  e OP_SeekLe:    
18920 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
18930 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
18940 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGe:         /* 
18950 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
18960 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20  e OP_SeekGt: {  
18970 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
18980 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  3 */.  int i = p
18990 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
189a0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
189b0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
189c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
189d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
189e0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
189f0 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
18a00 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
18a10 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
18a20 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 2c   ){.    int res,
18a30 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20 70 4f   oc;.    oc = pO
18a40 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70  p->opcode;.    p
18a50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
18a60 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
18a70 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 69 36 34  ble ){.      i64
18a80 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
18a90 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
18aa0 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
18ab0 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75       /* The inpu
18ac0 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
18ad0 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
18ae0 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
18af0 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20  l, string,.     
18b00 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
18b10 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
18b20 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
18b30 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
18b40 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  do.      ** the 
18b50 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
18b60 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61 70 70  it. */.      app
18b70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
18b80 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69  y(pIn3);.      i
18b90 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
18ba0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
18bb0 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
18bc0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
18bd0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
18be0 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
18bf0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
18c00 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
18c10 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c  thout.      ** l
18c20 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
18c30 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
18c40 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
18c50 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
18c60 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
18c70 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
18c80 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
18c90 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
18ca0 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
18cb0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66  .          /* If
18cc0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
18cd0 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
18ce0 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
18cf0 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
18d00 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
18d10 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
18d20 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
18d30 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
18d40 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
18d50 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
18d60 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
18d70 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77  .        /* If w
18d80 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
18d90 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20  nt, then the P3 
18da0 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20  value must be a 
18db0 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20  floating.       
18dc0 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72   ** point number
18dd0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
18de0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
18df0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30  s & MEM_Real)!=0
18e00 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28   );..        if(
18e10 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f   iKey==SMALLEST_
18e20 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e  INT64 && (pIn3->
18e30 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c  r<(double)iKey |
18e40 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a  | pIn3->r>0) ){.
18e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18e60 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 20   P3 value is to 
18e70 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75  large in magnitu
18e80 64 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  de to be express
18e90 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20  ed as an.       
18ea0 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a     ** integer. *
18eb0 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  /.          res 
18ec0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = 1;.          i
18ed0 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a  f( pIn3->r<0 ){.
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
18ef0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
18f00 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc==OP_SeekGe )
18f10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
18f20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18f30 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73  eFirst(pC->pCurs
18f40 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
18f50 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
18f60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18f70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18f80 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18f90 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65    }.          }e
18fa0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
18fb0 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
18fc0 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
18fd0 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kLe ){.         
18fe0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18ff0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
19000 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
19020 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19030 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19040 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19050 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19060 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
19070 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
19080 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
19090 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
190a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
190b0 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ak;.        }els
190c0 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  e if( oc==OP_See
190d0 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
190e0 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekGe ){.        
190f0 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69    /* Use the cei
19100 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20  ling() function 
19110 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d  to convert real-
19120 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  >int */.        
19130 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20    if( pIn3->r > 
19140 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
19150 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Key++;.        }
19160 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
19170 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72  /* Use the floor
19180 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  () function to c
19190 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74  onvert real->int
191a0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
191b0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
191c0 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLe || oc==OP_Se
191d0 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ekGt );.        
191e0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20    if( pIn3->r < 
191f0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
19200 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  Key--;.        }
19210 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20  .      } .      
19220 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19230 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
19240 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
19250 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
19260 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
19270 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
19280 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
19290 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
192a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
192b0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
192c0 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
192d0 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
192e0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
192f0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d   = iKey;.      }
19300 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19310 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
19320 20 72 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 46   r;.      int nF
19330 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
19340 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
19350 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
19360 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61  INT32 );.      a
19370 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
19380 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  );.      r.pKeyI
19390 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
193a0 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
193b0 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
193c0 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d  ;.      if( oc==
193d0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
193e0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
193f0 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
19400 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
19410 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
19420 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d         r.flags =
19430 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
19440 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
19450 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
19460 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19470 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
19480 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
19490 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
194a0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
194b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
194c0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
194d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
194e0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e      }.      pC->
194f0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
19500 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
19510 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
19520 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
19530 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
19540 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
19550 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
19560 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
19570 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
19580 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
19590 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
195a0 6b 47 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  kGt ){.      if(
195b0 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
195c0 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
195d0 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Gt) ){.        r
195e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
195f0 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
19600 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
19610 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
19620 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
19630 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19640 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
19650 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
19660 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19670 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
19680 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
19690 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
196a0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
196b0 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
196c0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
196d0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
196e0 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20  P_SeekLt) ){.   
196f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19700 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
19710 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
19720 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
19730 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
19740 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19750 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
19760 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
19770 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
19780 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65  e{.        /* re
19790 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
197a0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
197b0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
197c0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
197d0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
197e0 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
197f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
19800 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
19810 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
19820 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
19830 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
19840 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
19850 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
19860 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
19870 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
19880 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f   if( !pC->pseudo
19890 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
198a0 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
198b0 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
198c0 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
198d0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
198e0 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
198f0 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
19900 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
19910 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
19920 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
19930 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
19940 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
19950 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
19960 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
19970 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
19980 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19990 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
199a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
199b0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
199c0 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
199d0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
199e0 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
199f0 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
19a00 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
19a10 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
19a20 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
19a30 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
19a40 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
19a50 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
19a60 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
19a70 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
19a80 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
19a90 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
19aa0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
19ab0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
19ac0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
19ad0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
19ae0 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
19af0 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in2 */.  int i 
19b00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
19b10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
19b20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
19b30 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
19b40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
19b50 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
19b60 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
19b70 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
19b80 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
19b90 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43  sTable );.    pC
19ba0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
19bb0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
19bc0 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62  get = sqlite3Vdb
19bd0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
19be0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
19bf0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70  Valid = 0;.    p
19c00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
19c10 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  o = 1;.  }.  bre
19c20 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
19c30 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
19c40 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
19c50 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
19c60 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
19c70 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
19c80 2e 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  .  P1 is an inde
19c90 78 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72  x..** If an entr
19ca0 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  y that matches t
19cb0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
19cc0 73 74 65 72 20 70 33 20 65 78 69 73 74 73 20 69  ster p3 exists i
19cd0 6e 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  n P1 then.** jum
19ce0 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  p to P2.  If the
19cf0 20 50 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e   P3 value does n
19d00 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74  ot match any ent
19d10 72 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e  ry in P1.** then
19d20 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65   fall thru.  The
19d30 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65   P1 cursor is le
19d40 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
19d50 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
19d60 79 0a 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74  y.** if it exist
19d70 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  s..**.** This in
19d80 73 74 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65  struction is use
19d90 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
19da0 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77  he IN operator w
19db0 68 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74  here the.** left
19dc0 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20 61 20  -hand side is a 
19dd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19de0 2e 20 20 50 31 20 6d 61 79 20 62 65 20 61 20 74  .  P1 may be a t
19df0 72 75 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74  rue index, or it
19e00 0a 2a 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d  .** may be a tem
19e10 70 6f 72 61 72 79 20 69 6e 64 65 78 20 74 68 61  porary index tha
19e20 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75  t holds the resu
19e30 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43  lts of the SELEC
19e40 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  T.** statement. 
19e50 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
19e60 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20  on is also used 
19e70 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
19e80 0a 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79  .** DISTINCT key
19e90 77 6f 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73  word in SELECT s
19ea0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
19eb0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
19ec0 6e 20 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65  n checks if inde
19ed0 78 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20  x P1 contains a 
19ee0 72 65 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68  record for which
19ef0 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e   .** the first N
19f00 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75   serialized valu
19f10 65 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  es exactly match
19f20 20 74 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65   the N serialize
19f30 64 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74  d values.** in t
19f40 68 65 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67  he record in reg
19f50 69 73 74 65 72 20 50 33 2c 20 77 68 65 72 65 20  ister P3, where 
19f60 4e 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  N is the total n
19f70 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
19f80 69 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63  in.** the P3 rec
19f90 6f 72 64 20 28 74 68 65 20 50 33 20 72 65 63 6f  ord (the P3 reco
19fa0 72 64 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  rd is a prefix o
19fb0 66 20 74 68 65 20 50 31 20 72 65 63 6f 72 64 29  f the P1 record)
19fc0 2e 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  . .**.** See als
19fd0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55  o: NotFound, IsU
19fe0 6e 69 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73  nique, NotExists
19ff0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1a000 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
1a010 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   * *.**.** Regis
1a020 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1a030 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1a040 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1a050 50 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65  P1 is.** an inde
1a060 78 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20  x.  If no entry 
1a070 65 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 61  exists in P1 tha
1a080 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c  t matches the bl
1a090 6f 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ob then jump.** 
1a0a0 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e  to P2.  If an en
1a0b0 74 72 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e  try does existin
1a0c0 67 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  g, fall through.
1a0d0 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1a0e0 6c 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  left.** pointing
1a0f0 20 74 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68   to the entry th
1a100 61 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a  at matches..**.*
1a110 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1a120 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73  d, NotExists, Is
1a130 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1a140 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
1a150 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a160 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
1a170 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1a180 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1a190 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  i = pOp->p1;.  i
1a1a0 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1a1b0 20 3d 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73   = 0;.  VdbeCurs
1a1c0 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1a1d0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1a1e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1a1f0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1a200 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20  =0 );.  if( (pC 
1a210 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e  = p->apCsr[i])->
1a220 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20  pCursor!=0 ){.  
1a230 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55    int res;.    U
1a240 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1a250 49 64 78 4b 65 79 3b 0a 0a 20 20 20 20 61 73 73  IdxKey;..    ass
1a260 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1a270 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
1a280 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1a290 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1a2a0 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1a2b0 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1a2c0 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1a2d0 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1a2e0 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  z,.             
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65           aTempRe
1a310 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
1a320 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49  ec));.    if( pI
1a330 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20  dxKey==0 ){.    
1a340 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
1a350 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
1a360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
1a370 6e 64 20 29 7b 0a 20 20 20 20 20 20 70 49 64 78  nd ){.      pIdx
1a380 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e  Key->flags |= UN
1a390 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
1a3a0 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  TCH;.    }.    r
1a3b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a3c0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1a3d0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
1a3e0 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
1a3f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1a400 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52  eDeleteUnpackedR
1a410 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a  ecord(pIdxKey);.
1a420 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a430 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62  TE_OK ){.      b
1a440 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
1a450 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1a460 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43  (res==0);.    pC
1a470 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1a480 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1a490 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1a4a0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69  E_STALE;.  }.  i
1a4b0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1a4c0 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
1a4d0 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
1a4e0 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1a4f0 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
1a500 20 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45     if( !alreadyE
1a510 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1a520 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1a530 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a540 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31  ode: IsUnique P1
1a550 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1a560 2a 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  * The P3 registe
1a570 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
1a580 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1a590 62 65 72 2e 20 20 43 61 6c 6c 20 74 68 69 73 0a  ber.  Call this.
1a5a0 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ** record number
1a5b0 20 52 2e 20 20 54 68 65 20 50 34 20 72 65 67 69   R.  The P4 regi
1a5c0 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ster contains an
1a5d0 20 69 6e 64 65 78 20 6b 65 79 20 63 72 65 61 74   index key creat
1a5e0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4d 61 6b 65  ed.** using Make
1a5f0 52 65 63 6f 72 64 2e 20 20 43 61 6c 6c 20 69 74  Record.  Call it
1a600 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   K..**.** P1 is 
1a610 61 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74  an index.  So it
1a620 20 68 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64   has no data and
1a630 20 69 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74   its key consist
1a640 73 20 6f 66 20 61 0a 2a 2a 20 72 65 63 6f 72 64  s of a.** record
1a650 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50   generated by OP
1a660 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72  _MakeRecord wher
1a670 65 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  e the last field
1a680 20 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69   is the .** rowi
1a690 64 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  d of the entry t
1a6a0 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 72 65  hat the index re
1a6b0 66 65 72 73 20 74 6f 2e 0a 2a 2a 20 0a 2a 2a 20  fers to..** .** 
1a6c0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a6d0 20 61 73 6b 73 20 69 66 20 74 68 65 72 65 20 69   asks if there i
1a6e0 73 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31  s an entry in P1
1a6f0 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 66 69   where the.** fi
1a700 65 6c 64 73 20 6d 61 74 63 68 65 73 20 4b 20 62  elds matches K b
1a710 75 74 20 74 68 65 20 72 6f 77 69 64 20 69 73 20  ut the rowid is 
1a720 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52  different from R
1a730 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
1a740 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1a750 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 61 6e  then there is an
1a760 20 69 6d 6d 65 64 69 61 74 65 0a 2a 2a 20 6a 75   immediate.** ju
1a770 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6e  mp to P2.  If an
1a780 79 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78 69  y entry does exi
1a790 73 74 20 77 68 65 72 65 20 74 68 65 20 69 6e 64  st where the ind
1a7a0 65 78 20 73 74 72 69 6e 67 0a 2a 2a 20 6d 61 74  ex string.** mat
1a7b0 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20 72  ches K but the r
1a7c0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1a7d0 6e 6f 74 20 52 2c 20 74 68 65 6e 20 74 68 65 20  not R, then the 
1a7e0 72 65 63 6f 72 64 0a 2a 2a 20 6e 75 6d 62 65 72  record.** number
1a7f0 20 66 6f 72 20 74 68 61 74 20 65 6e 74 72 79 20   for that entry 
1a800 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
1a810 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 0a 2a  P3 and control.*
1a820 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1a830 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1a840 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
1a850 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
1a860 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f  d, NotExists, Fo
1a870 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  und.*/.case OP_I
1a880 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20  sUnique: {      
1a890 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a8a0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
1a8b0 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
1a8c0 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73  r *pCx;.  BtCurs
1a8d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 4d 65 6d  or *pCrsr;.  Mem
1a8e0 20 2a 70 4b 3b 0a 20 20 69 36 34 20 52 3b 0a 0a   *pK;.  i64 R;..
1a8f0 20 20 2f 2a 20 50 6f 70 20 74 68 65 20 76 61 6c    /* Pop the val
1a900 75 65 20 52 20 6f 66 66 20 74 68 65 20 74 6f 70  ue R off the top
1a910 20 6f 66 20 74 68 65 20 73 74 61 63 6b 0a 20 20   of the stack.  
1a920 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1a930 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a940 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
1a950 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70  pOp->p4.i>0 && p
1a960 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65  Op->p4.i<=p->nMe
1a970 6d 20 29 3b 0a 20 20 70 4b 20 3d 20 26 70 2d 3e  m );.  pK = &p->
1a980 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b  aMem[pOp->p4.i];
1a990 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
1a9a0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
1a9b0 29 3b 0a 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75  );.  R = pIn3->u
1a9c0 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  .i;.  assert( i>
1a9d0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1a9e0 6f 72 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d  or );.  pCx = p-
1a9f0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1aa00 65 72 74 28 20 70 43 78 21 3d 30 20 29 3b 0a 20  ert( pCx!=0 );. 
1aa10 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43   pCrsr = pCx->pC
1aa20 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
1aa30 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  sr!=0 ){.    int
1aa40 20 72 65 73 3b 0a 20 20 20 20 69 36 34 20 76 3b   res;.    i64 v;
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f       /* The reco
1aa70 72 64 20 6e 75 6d 62 65 72 20 74 68 61 74 20 6d  rd number that m
1aa80 61 74 63 68 65 73 20 4b 20 2a 2f 0a 20 20 20 20  atches K */.    
1aa90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
1aaa0 70 49 64 78 4b 65 79 3b 20 20 20 2f 2a 20 55 6e  pIdxKey;   /* Un
1aab0 70 61 63 6b 65 64 20 76 65 72 73 69 6f 6e 20 6f  packed version o
1aac0 66 20 50 34 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  f P4 */..    /* 
1aad0 4d 61 6b 65 20 73 75 72 65 20 4b 20 69 73 20 61  Make sure K is a
1aae0 20 73 74 72 69 6e 67 20 61 6e 64 20 6d 61 6b 65   string and make
1aaf0 20 7a 4b 65 79 20 70 6f 69 6e 74 20 74 6f 20 4b   zKey point to K
1ab00 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1ab10 72 74 28 20 70 4b 2d 3e 66 6c 61 67 73 20 26 20  rt( pK->flags & 
1ab20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1ab30 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
1ab40 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
1ab50 6b 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c  k(pCx->pKeyInfo,
1ab60 20 70 4b 2d 3e 6e 2c 20 70 4b 2d 3e 7a 2c 0a 20   pK->n, pK->z,. 
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c 20 73       aTempRec, s
1aba0 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 29  izeof(aTempRec))
1abb0 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
1abc0 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 67 6f  y==0 ){.      go
1abd0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
1abe0 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c  .    pIdxKey->fl
1abf0 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1ac00 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 0a 20  IGNORE_ROWID;.. 
1ac10 20 20 20 2f 2a 20 53 65 61 72 63 68 20 66 6f 72     /* Search for
1ac20 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20   an entry in P1 
1ac30 77 68 65 72 65 20 61 6c 6c 20 62 75 74 20 74 68  where all but th
1ac40 65 20 6c 61 73 74 20 72 6f 77 69 64 20 6d 61 74  e last rowid mat
1ac50 63 68 20 4b 0a 20 20 20 20 2a 2a 20 49 66 20 74  ch K.    ** If t
1ac60 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1ac70 65 6e 74 72 79 2c 20 6a 75 6d 70 20 69 6d 6d 65  entry, jump imme
1ac80 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 20  diately to P2.. 
1ac90 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
1aca0 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1acb0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
1acc0 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73  pCx->cacheStatus
1acd0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1ace0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1acf0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1ad00 6b 65 64 28 70 43 72 73 72 2c 20 70 49 64 78 4b  ked(pCrsr, pIdxK
1ad10 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
1ad20 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1ad30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1ad40 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
1ad50 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  eUnpackedRecord(
1ad60 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20  pIdxKey);.      
1ad70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ad80 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1ad90 20 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a     if( res<0 ){.
1ada0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1adb0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
1adc0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1add0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1ade0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1adf0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  - 1;.        sql
1ae00 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
1ae10 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
1ae20 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 20 20 62  xKey);.        b
1ae30 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
1ae40 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1ae50 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
1ae60 6d 70 61 72 65 28 70 43 78 2c 20 70 49 64 78 4b  mpare(pCx, pIdxK
1ae70 65 79 2c 20 26 72 65 73 29 3b 20 0a 20 20 20 20  ey, &res); .    
1ae80 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
1ae90 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  eUnpackedRecord(
1aea0 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66  pIdxKey);.    if
1aeb0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1aec0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1aed0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
1aee0 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
1aef0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1af00 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   1;.      break;
1af10 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41  .    }..    /* A
1af20 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 70 43  t this point, pC
1af30 72 73 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20  rsr is pointing 
1af40 74 6f 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50  to an entry in P
1af50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75 74 0a  1 where all but.
1af60 20 20 20 20 2a 2a 20 74 68 65 20 66 69 6e 61 6c      ** the final
1af70 20 65 6e 74 72 79 20 28 74 68 65 20 72 6f 77 69   entry (the rowi
1af80 64 29 20 6d 61 74 63 68 65 73 20 4b 2e 20 20 43  d) matches K.  C
1af90 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
1afa0 68 65 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c 20  he.    ** final 
1afb0 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 69 73 20  rowid column is 
1afc0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52  different from R
1afd0 2e 20 20 49 66 20 69 74 20 65 71 75 61 6c 73 20  .  If it equals 
1afe0 52 20 74 68 65 6e 20 6a 75 6d 70 0a 20 20 20 20  R then jump.    
1aff0 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
1b000 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  o P2..    */.   
1b010 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1b020 65 49 64 78 52 6f 77 69 64 28 70 43 72 73 72 2c  eIdxRowid(pCrsr,
1b030 20 26 76 29 3b 0a 20 20 20 20 69 66 28 20 72 63   &v);.    if( rc
1b040 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b050 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1b060 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b070 20 20 7d 0a 20 20 20 20 69 66 28 20 76 3d 3d 52    }.    if( v==R
1b080 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1b090 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1b0a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
1b0b0 20 20 20 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c      /* The final
1b0c0 20 76 61 72 69 6e 74 20 6f 66 20 74 68 65 20 6b   varint of the k
1b0d0 65 79 20 69 73 20 64 69 66 66 65 72 65 6e 74 20  ey is different 
1b0e0 66 72 6f 6d 20 52 2e 20 20 53 74 6f 72 65 20 69  from R.  Store i
1b0f0 74 20 62 61 63 6b 0a 20 20 20 20 2a 2a 20 69 6e  t back.    ** in
1b100 74 6f 20 72 65 67 69 73 74 65 72 20 52 33 2e 20  to register R3. 
1b110 20 28 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d   (The record num
1b120 62 65 72 20 6f 66 20 61 6e 20 65 6e 74 72 79 20  ber of an entry 
1b130 74 68 61 74 20 76 69 6f 6c 61 74 65 73 0a 20 20  that violates.  
1b140 20 20 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f    ** a UNIQUE co
1b150 6e 73 74 72 61 69 6e 74 2e 29 0a 20 20 20 20 2a  nstraint.).    *
1b160 2f 0a 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20  /.    pIn3->u.i 
1b170 3d 20 76 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = v;.    assert(
1b180 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
1b190 5f 49 6e 74 20 29 3b 0a 20 20 7d 0a 20 20 62 72  _Int );.  }.  br
1b1a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b1b0 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1b1c0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1b1d0 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1b1e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1b1f0 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e  s a integer key.
1b200 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a    If a record .*
1b210 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20  * with that key 
1b220 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
1b230 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
1b240 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1b250 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
1b260 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  d does exist, th
1b270 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
1b280 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1b290 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  t .** pointing t
1b2a0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  o the record if 
1b2b0 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a  it exists..**.**
1b2c0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
1b2d0 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65  between this ope
1b2e0 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f  ration and NotFo
1b2f0 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73  und is that this
1b300 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73  .** operation as
1b310 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73  sumes the key is
1b320 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
1b330 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62  that P1 is a tab
1b340 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f  le whereas.** No
1b350 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b  tFound assumes k
1b360 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e  ey is a blob con
1b370 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61  structed from Ma
1b380 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20  keRecord and.** 
1b390 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
1b3a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1b3b0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1b3c0 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73   IsUnique.*/.cas
1b3d0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1b3e0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1b3f0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
1b400 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
1b410 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1b420 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1b430 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1b440 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1b450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1b460 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1b470 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
1b480 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
1b490 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
1b4a0 0a 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20 30  .    int res = 0
1b4b0 3b 0a 20 20 20 20 75 36 34 20 69 4b 65 79 3b 0a  ;.    u64 iKey;.
1b4c0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1b4d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1b4e0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
1b4f0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73   p->apCsr[i]->is
1b500 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65  Table );.    iKe
1b510 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e  y = intToKey(pIn
1b520 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 72 63 20  3->u.i);.    rc 
1b530 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1b540 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1b550 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 26  sr, 0, iKey, 0,&
1b560 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1b570 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1b580 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1b590 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1b5a0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1b5b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1b5c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1b5d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1b5e0 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d 30 20  .    if( res!=0 
1b5f0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1b600 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1b610 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77   assert( pC->row
1b620 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a  idIsValid==0 );.
1b630 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
1b640 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  ( !pC->pseudoTab
1b650 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  le ){.    /* Thi
1b660 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
1b670 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65  n attempt to ope
1b680 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20  n a read cursor 
1b690 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73  on the .    ** s
1b6a0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
1b6b0 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  le returns SQLIT
1b6c0 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a  E_EMPTY..    */.
1b6d0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1b6e0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70  isTable );.    p
1b6f0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1b700 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1b710 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1b720 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
1b730 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1b740 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1b750 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  * *.**.** Find t
1b760 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
1b770 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1b780 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
1b790 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
1b7a0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
1b7b0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1b7c0 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
1b7d0 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
1b7e0 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
1b7f0 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
1b800 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
1b810 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1b820 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
1b830 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1b840 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1b850 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
1b860 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1b870 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1b880 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1b890 69 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  i]!=0 );.  pOut-
1b8a0 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1b8b0 69 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  i]->seqCount++;.
1b8c0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1b8d0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1b8e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1b8f0 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1b900 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1b910 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1b920 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1b930 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1b940 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1b950 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1b960 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1b970 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1b980 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1b990 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1b9a0 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1b9b0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1b9c0 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1b9d0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1b9e0 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1b9f0 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1ba00 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1ba10 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1ba20 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68   register that h
1ba30 6f 6c 64 73 20 74 68 65 20 6c 61 72 67 65 73 74  olds the largest
1ba40 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 67   previously.** g
1ba50 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1ba60 6e 75 6d 62 65 72 2e 20 20 4e 6f 20 6e 65 77 20  number.  No new 
1ba70 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
1ba80 72 65 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  re allowed to be
1ba90 20 6c 65 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68   less.** than th
1baa0 69 73 20 76 61 6c 75 65 2e 20 20 57 68 65 6e 20  is value.  When 
1bab0 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
1bac0 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
1bad0 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a  a SQLITE_FULL.**
1bae0 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
1baf0 74 65 64 2e 20 20 54 68 65 20 50 33 20 72 65 67  ted.  The P3 reg
1bb00 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
1bb10 20 77 69 74 68 20 74 68 65 20 67 65 6e 65 72 61   with the genera
1bb20 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75  ted.** record nu
1bb30 6d 62 65 72 2e 20 20 54 68 69 73 20 50 33 20 6d  mber.  This P3 m
1bb40 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
1bb50 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
1bb60 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
1bb70 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
1bb80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
1bb90 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1bba0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1bbb0 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1bbc0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34  = pOp->p1;.  i64
1bbd0 20 76 20 3d 20 30 3b 0a 20 20 56 64 62 65 43 75   v = 0;.  VdbeCu
1bbe0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1bbf0 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1bc00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1bc10 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
1bc20 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  ]!=0 );.  if( (p
1bc30 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
1bc40 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 20 29 7b 0a  ->pCursor==0 ){.
1bc50 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
1bc60 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
1bc70 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
1bc80 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
1bc90 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1bca0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
1bcb0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
1bcc0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
1bcd0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
1bce0 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
1bcf0 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
1bd00 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
1bd10 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
1bd20 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
1bd30 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
1bd40 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
1bd50 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
1bd60 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
1bd70 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
1bd80 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1bd90 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
1bda0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
1bdb0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
1bdc0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
1bdd0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
1bde0 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
1bdf0 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
1be00 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
1be10 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
1be20 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
1be30 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
1be40 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
1be50 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
1be60 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
1be70 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
1be80 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
1be90 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
1bea0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
1beb0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
1bec0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
1bed0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
1bee0 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
1bef0 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 30 20  ain, up to 1000 
1bf00 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20  times..    **.  
1bf10 20 20 2a 2a 20 46 6f 72 20 61 20 74 61 62 6c 65    ** For a table
1bf20 20 77 69 74 68 20 6c 65 73 73 20 74 68 61 6e 20   with less than 
1bf30 32 20 62 69 6c 6c 69 6f 6e 20 65 6e 74 72 69 65  2 billion entrie
1bf40 73 2c 20 74 68 65 20 70 72 6f 62 61 62 69 6c 69  s, the probabili
1bf50 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 6e 6f 74  ty.    ** of not
1bf60 20 66 69 6e 64 69 6e 67 20 61 20 75 6e 75 73 65   finding a unuse
1bf70 64 20 72 6f 77 69 64 20 69 73 20 61 62 6f 75 74  d rowid is about
1bf80 20 31 2e 30 65 2d 33 30 30 2e 20 20 54 68 69 73   1.0e-300.  This
1bf90 20 69 73 20 61 20 0a 20 20 20 20 2a 2a 20 6e 6f   is a .    ** no
1bfa0 6e 2d 7a 65 72 6f 20 70 72 6f 62 61 62 69 6c 69  n-zero probabili
1bfb0 74 79 2c 20 62 75 74 20 69 74 20 69 73 20 73 74  ty, but it is st
1bfc0 69 6c 6c 20 76 61 6e 69 73 68 69 6e 67 6c 79 20  ill vanishingly 
1bfd0 73 6d 61 6c 6c 20 61 6e 64 20 73 68 6f 75 6c 64  small and should
1bfe0 0a 20 20 20 20 2a 2a 20 6e 65 76 65 72 20 63 61  .    ** never ca
1bff0 75 73 65 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20  use a problem.  
1c000 59 6f 75 20 61 72 65 20 6d 75 63 68 2c 20 6d 75  You are much, mu
1c010 63 68 20 6d 6f 72 65 20 6c 69 6b 65 6c 79 20 74  ch more likely t
1c020 6f 20 68 61 76 65 20 61 0a 20 20 20 20 2a 2a 20  o have a.    ** 
1c030 68 61 72 64 77 61 72 65 20 66 61 69 6c 75 72 65  hardware failure
1c040 20 74 68 61 6e 20 66 6f 72 20 74 68 69 73 20 61   than for this a
1c050 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 61 69 6c  lgorithm to fail
1c060 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1c070 54 68 65 20 61 6e 61 6c 79 73 69 73 20 69 6e 20  The analysis in 
1c080 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
1c090 61 67 72 61 70 68 20 61 73 73 75 6d 65 73 20 74  agraph assumes t
1c0a0 68 61 74 20 79 6f 75 20 68 61 76 65 20 61 20 67  hat you have a g
1c0b0 6f 6f 64 0a 20 20 20 20 2a 2a 20 73 6f 75 72 63  ood.    ** sourc
1c0c0 65 20 6f 66 20 72 61 6e 64 6f 6d 20 6e 75 6d 62  e of random numb
1c0d0 65 72 73 2e 20 20 49 73 20 61 20 6c 69 62 72 61  ers.  Is a libra
1c0e0 72 79 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65  ry function like
1c0f0 20 6c 72 61 6e 64 34 38 28 29 0a 20 20 20 20 2a   lrand48().    *
1c100 2a 20 67 6f 6f 64 20 65 6e 6f 75 67 68 3f 20 20  * good enough?  
1c110 4d 61 79 62 65 2e 20 4d 61 79 62 65 20 6e 6f 74  Maybe. Maybe not
1c120 2e 20 49 74 27 73 20 68 61 72 64 20 74 6f 20 6b  . It's hard to k
1c130 6e 6f 77 20 77 68 65 74 68 65 72 20 74 68 65 72  now whether ther
1c140 65 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62  e.    ** might b
1c150 65 20 73 75 62 74 6c 65 20 62 75 67 73 20 69 73  e subtle bugs is
1c160 20 73 6f 6d 65 20 69 6d 70 6c 65 6d 65 6e 74 61   some implementa
1c170 74 69 6f 6e 73 20 6f 66 20 6c 72 61 6e 64 34 38  tions of lrand48
1c180 28 29 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 63  () that.    ** c
1c190 6f 75 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c  ould cause probl
1c1a0 65 6d 73 2e 20 54 6f 20 61 76 6f 69 64 20 75 6e  ems. To avoid un
1c1b0 63 65 72 74 61 69 6e 74 79 2c 20 53 51 4c 69 74  certainty, SQLit
1c1c0 65 20 75 73 65 73 20 69 74 73 20 6f 77 6e 20 0a  e uses its own .
1c1d0 20 20 20 20 2a 2a 20 72 61 6e 64 6f 6d 20 6e 75      ** random nu
1c1e0 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72 20 62  mber generator b
1c1f0 61 73 65 64 20 6f 6e 20 74 68 65 20 52 43 34 20  ased on the RC4 
1c200 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1c210 2a 0a 20 20 20 20 2a 2a 20 54 6f 20 70 72 6f 6d  *.    ** To prom
1c220 6f 74 65 20 6c 6f 63 61 6c 69 74 79 20 6f 66 20  ote locality of 
1c230 72 65 66 65 72 65 6e 63 65 20 66 6f 72 20 72 65  reference for re
1c240 70 65 74 69 74 69 76 65 20 69 6e 73 65 72 74 73  petitive inserts
1c250 2c 20 74 68 65 0a 20 20 20 20 2a 2a 20 66 69 72  , the.    ** fir
1c260 73 74 20 66 65 77 20 61 74 74 65 6d 70 74 73 20  st few attempts 
1c270 61 74 20 63 68 6f 6f 73 69 6e 67 20 61 20 72 61  at choosing a ra
1c280 6e 64 6f 6d 20 72 6f 77 69 64 20 70 69 63 6b 20  ndom rowid pick 
1c290 76 61 6c 75 65 73 20 6a 75 73 74 20 61 20 6c 69  values just a li
1c2a0 74 74 6c 65 0a 20 20 20 20 2a 2a 20 6c 61 72 67  ttle.    ** larg
1c2b0 65 72 20 74 68 61 6e 20 74 68 65 20 70 72 65 76  er than the prev
1c2c0 69 6f 75 73 20 72 6f 77 69 64 2e 20 20 54 68 69  ious rowid.  Thi
1c2d0 73 20 68 61 73 20 62 65 65 6e 20 73 68 6f 77 6e  s has been shown
1c2e0 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 6c 79 0a   experimentally.
1c2f0 20 20 20 20 2a 2a 20 74 6f 20 64 6f 75 62 6c 65      ** to double
1c300 20 74 68 65 20 73 70 65 65 64 20 6f 66 20 74 68   the speed of th
1c310 65 20 43 4f 50 59 20 6f 70 65 72 61 74 69 6f 6e  e COPY operation
1c320 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74  ..    */.    int
1c330 20 72 65 73 3d 30 2c 20 72 78 3d 53 51 4c 49 54   res=0, rx=SQLIT
1c340 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20 20 20 69  E_OK, cnt;.    i
1c350 36 34 20 78 3b 0a 20 20 20 20 63 6e 74 20 3d 20  64 x;.    cnt = 
1c360 30 3b 0a 20 20 20 20 69 66 28 20 28 73 71 6c 69  0;.    if( (sqli
1c370 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
1c380 2d 3e 70 43 75 72 73 6f 72 29 26 28 42 54 52 45  ->pCursor)&(BTRE
1c390 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45 45 5f 5a  E_INTKEY|BTREE_Z
1c3a0 45 52 4f 44 41 54 41 29 29 20 21 3d 0a 20 20 20  ERODATA)) !=.   
1c3b0 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 54         BTREE_INT
1c3c0 4b 45 59 20 29 7b 0a 20 20 20 20 20 20 72 63 20  KEY ){.      rc 
1c3d0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
1c3e0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
1c3f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c400 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1c410 61 73 73 65 72 74 28 20 28 73 71 6c 69 74 65 33  assert( (sqlite3
1c420 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70  BtreeFlags(pC->p
1c430 43 75 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f  Cursor) & BTREE_
1c440 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b 0a 20 20  INTKEY)!=0 );.  
1c450 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69 74    assert( (sqlit
1c460 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d  e3BtreeFlags(pC-
1c470 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52 45  >pCursor) & BTRE
1c480 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d 30 20 29  E_ZERODATA)==0 )
1c490 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1c4a0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1c4b0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1c4c0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1c4d0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1c4e0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1c4f0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1c500 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1c510 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1c520 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1c530 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1c540 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1c550 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1c560 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1c570 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1c580 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1c590 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1c5a0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1c5b0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1c5c0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1c5d0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1c5e0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1c5f0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1c600 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1c610 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1c620 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69  Rowid ){.      i
1c630 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64  f( pC->nextRowid
1c640 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Valid ){.       
1c650 20 76 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77   v = pC->nextRow
1c660 69 64 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  id;.      }else{
1c670 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1c680 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1c690 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1c6a0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1c6b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1c6c0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1c6d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c6e0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1c6f0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1c700 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b            v = 1;
1c710 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1c720 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1c730 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1c740 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
1c750 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65            v = ke
1c760 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20  yToInt(v);.     
1c770 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1c780 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1c790 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1c7a0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1c7b0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1c7c0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1c7d0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c7e0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69     }.      }..#i
1c7f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c800 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1c810 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
1c820 33 20 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d  3 ){.        Mem
1c830 20 2a 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20   *pMem;.        
1c840 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1c850 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
1c860 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69  >nMem ); /* P3 i
1c870 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1c880 20 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20   cell */.       
1c890 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
1c8a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49  [pOp->p3];..REGI
1c8b0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1c8c0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1c8d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1c8e0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1c8f0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1c900 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1c910 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1c920 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1c930 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1c940 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1c950 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1c960 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1c970 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1c980 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1c990 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20  _FULL;.         
1c9a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c9b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1c9c0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1c9d0 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
1c9e0 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70  .          v = p
1c9f0 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
1ca00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1ca10 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
1ca20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
1ca30 20 20 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52       if( v<MAX_R
1ca40 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1ca50 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1ca60 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1ca70 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20  pC->nextRowid = 
1ca80 76 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  v+1;.      }else
1ca90 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65  {.        pC->ne
1caa0 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30  xtRowidValid = 0
1cab0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1cac0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
1cad0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1cae0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1caf0 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51  >p3==0 );  /* SQ
1cb00 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68  LITE_FULL must h
1cb10 61 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69  ave occurred pri
1cb20 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20  or to this */.  
1cb30 20 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f      v = db->prio
1cb40 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20  rNewRowid;.     
1cb50 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
1cb60 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
1cb70 63 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66  cnt==0 && (v&0xf
1cb80 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20  fffff)==v ){.   
1cb90 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20         v++;.    
1cba0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1cbb0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1cbc0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1cbd0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1cbe0 20 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20    if( cnt<5 ) v 
1cbf0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1cc00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1cc10 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  f( v==0 ) contin
1cc20 75 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20  ue;.        x = 
1cc30 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20  intToKey(v);.   
1cc40 20 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65       rx = sqlite
1cc50 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1cc60 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1cc70 2c 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20  , 0, (u64)x, 0, 
1cc80 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63  &res);.        c
1cc90 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69  nt++;.      }whi
1cca0 6c 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72  le( cnt<100 && r
1ccb0 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  x==SQLITE_OK && 
1ccc0 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  res==0 );.      
1ccd0 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69  db->priorNewRowi
1cce0 64 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28  d = v;.      if(
1ccf0 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rx==SQLITE_OK &
1cd00 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
1cd10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1cd20 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f  FULL;.        go
1cd30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1cd40 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1cd50 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77     }.    pC->row
1cd60 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1cd70 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1cd80 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1cd90 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1cda0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1cdb0 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
1cdc0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1cdd0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1cde0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
1cdf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1ce00 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1ce10 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
1ce20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
1ce30 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
1ce40 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
1ce50 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
1ce60 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
1ce70 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
1ce80 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
1ce90 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
1cea0 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
1ceb0 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
1cec0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67  value stored reg
1ced0 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
1cee0 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
1cef0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1cf00 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
1cf10 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65  st.** be an inte
1cf20 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ger..**.** If th
1cf30 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1cf40 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1cf50 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1cf60 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1cf70 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1cf80 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1cf90 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1cfa0 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1cfb0 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1cfc0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1cfd0 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1cfe0 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1cff0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1d000 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1d010 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1d020 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1d030 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61  ified)..**.** Pa
1d040 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
1d050 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
1d060 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1d070 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
1d080 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
1d090 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
1d0a0 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
1d0b0 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
1d0c0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
1d0d0 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
1d0e0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
1d0f0 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
1d100 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
1d110 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
1d120 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
1d130 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
1d140 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
1d150 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
1d160 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
1d170 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
1d180 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
1d190 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
1d1a0 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
1d1b0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1d1c0 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
1d1d0 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
1d1e0 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
1d1f0 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
1d200 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
1d210 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
1d220 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
1d230 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1d240 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
1d250 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
1d260 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1d270 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
1d280 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
1d290 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  t..*/.case OP_In
1d2a0 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  sert: {.  Mem *p
1d2b0 44 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  Data = &p->aMem[
1d2c0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20  pOp->p2];.  Mem 
1d2d0 2a 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pKey = &p->aMem
1d2e0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36  [pOp->p3];..  i6
1d2f0 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65  4 iKey;   /* The
1d300 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1d310 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1d320 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1d330 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ted */.  int i =
1d340 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
1d350 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1d360 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1d370 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d380 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1d390 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d3a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d3b0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 7c 7c  C->pCursor!=0 ||
1d3c0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1d3d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
1d3e0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1d3f0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1d400 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1d410 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1d420 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1d430 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1d440 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1d450 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 69 6e 74  );..  iKey = int
1d460 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75 2e 69 29  ToKey(pKey->u.i)
1d470 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1d480 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1d490 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1d4a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1d4b0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1d4c0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1d4d0 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  d = pKey->u.i;. 
1d4e0 20 69 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77   if( pC->nextRow
1d4f0 69 64 56 61 6c 69 64 20 26 26 20 70 4b 65 79 2d  idValid && pKey-
1d500 3e 75 2e 69 3e 3d 70 43 2d 3e 6e 65 78 74 52 6f  >u.i>=pC->nextRo
1d510 77 69 64 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  wid ){.    pC->n
1d520 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20  extRowidValid = 
1d530 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 44 61  0;.  }.  if( pDa
1d540 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1d550 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
1d560 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
1d570 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
1d580 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1d590 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1d5a0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1d5b0 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  r) );.  }.  if( 
1d5c0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
1d5d0 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  ){.    if( !pC->
1d5e0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1d5f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1d600 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e  3DbFree(db, pC->
1d610 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20  pData);.    }.  
1d620 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65    pC->iKey = iKe
1d630 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61  y;.    pC->nData
1d640 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20   = pData->n;.   
1d650 20 69 66 28 20 70 44 61 74 61 2d 3e 7a 3d 3d 70   if( pData->z==p
1d660 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c  Data->zMalloc ||
1d670 20 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f   pC->ephemPseudo
1d680 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70  Table ){.      p
1d690 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61  C->pData = pData
1d6a0 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21  ->z;.      if( !
1d6b0 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  pC->ephemPseudoT
1d6c0 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  able ){.        
1d6d0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20  pData->flags &= 
1d6e0 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20  ~MEM_Dyn;.      
1d6f0 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c    pData->flags |
1d700 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  = MEM_Ephem;.   
1d710 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c       pData->zMal
1d720 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  loc = 0;.      }
1d730 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d740 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71    pC->pData = sq
1d750 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d  lite3Malloc( pC-
1d760 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20  >nData+2 );.    
1d770 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61    if( !pC->pData
1d780 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1d790 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d        memcpy(pC-
1d7a0 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a  >pData, pData->z
1d7b0 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20  , pC->nData);.  
1d7c0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1d7d0 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20  ->nData] = 0;.  
1d7e0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1d7f0 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a  ->nData+1] = 0;.
1d800 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75      }.    pC->nu
1d810 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c  llRow = 0;.  }el
1d820 73 65 7b 0a 20 20 20 20 69 6e 74 20 6e 5a 65 72  se{.    int nZer
1d830 6f 3b 0a 20 20 20 20 69 66 28 20 70 44 61 74 61  o;.    if( pData
1d840 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1d850 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  ro ){.      nZer
1d860 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
1d870 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ro;.    }else{. 
1d880 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a       nZero = 0;.
1d890 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
1d8a0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
1d8b0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  t(pC->pCursor, 0
1d8c0 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
1d8f0 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
1d920 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
1d930 4e 44 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 70 43  ND);.  }.  .  pC
1d940 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d950 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1d960 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d970 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1d980 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1d990 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1d9a0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1d9b0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1d9c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1d9d0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1d9e0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1d9f0 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
1da00 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1da10 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1da20 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1da30 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1da40 3e 70 34 2e 7a 3b 0a 20 20 20 20 69 6e 74 20 6f  >p4.z;.    int o
1da50 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
1da60 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
1da70 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
1da80 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
1da90 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1daa0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1dab0 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
1dac0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
1dad0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
1dae0 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1daf0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
1db00 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
1db10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1db20 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
1db30 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
1db40 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
1db50 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
1db60 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
1db70 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
1db80 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
1db90 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
1dba0 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
1dbb0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
1dbc0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
1dbd0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
1dbe0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
1dbf0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
1dc00 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
1dc10 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
1dc20 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
1dc30 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
1dc40 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
1dc50 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
1dc60 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
1dc70 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
1dc80 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1dc90 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1dca0 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
1dcb0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1dcc0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1dcd0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1dce0 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
1dcf0 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
1dd00 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
1dd10 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
1dd20 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
1dd30 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
1dd40 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1dd50 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
1dd60 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1dd70 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
1dd80 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
1dd90 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
1dda0 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1ddb0 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
1ddc0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
1ddd0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
1dde0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
1ddf0 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
1de00 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
1de10 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
1de20 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
1de30 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1de40 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e  P_Delete: {.  in
1de50 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1de60 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
1de70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1de80 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1de90 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1dea0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1deb0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1dec0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1ded0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1dee0 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
1def0 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74  valid for real t
1df00 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f  ables, no pseudo
1df10 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  tables */..  /* 
1df20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  If the update-ho
1df30 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
1df40 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20  ed, set iKey to 
1df50 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1df60 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20  .  ** row being 
1df70 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  deleted..  */.  
1df80 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
1df90 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
1dfa0 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
1dfb0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1dfc0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1dfd0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1dfe0 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64  );  /* lastRowid
1dff0 20 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73   set by previous
1e000 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a   OP_NotFound */.
1e010 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c      iKey = pC->l
1e020 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20  astRowid;.  }.. 
1e030 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1e040 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
1e050 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1e060 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e070 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71  error;.  rc = sq
1e080 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
1e090 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1e0a0 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61   pC->nextRowidVa
1e0b0 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
1e0c0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1e0d0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1e0e0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1e0f0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1e100 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1e110 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1e120 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1e130 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1e140 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1e150 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1e160 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1e170 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1e180 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1e190 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1e1a0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1e1b0 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
1e1c0 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54  _DELETE, zDb, zT
1e1d0 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
1e1e0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
1e1f0 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  0 );.  }.  if( p
1e200 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1e210 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
1e220 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ange++;.  break;
1e230 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1e240 65 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a  esetCount P1 * *
1e250 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e260 64 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d  de resets the VM
1e270 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
1e280 65 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20  e counter to 0. 
1e290 49 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a  If P1 is true,.*
1e2a0 2a 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  * then the value
1e2b0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
1e2c0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
1e2d0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1e2e0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
1e2f0 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
1e300 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
1e310 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
1e320 65 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a  e3_changes()).**
1e330 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65   before it is re
1e340 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
1e350 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
1e360 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
1e370 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
1e380 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
1e390 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1e3a0 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
1e3b0 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a  ->nChange);.  }.
1e3c0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
1e3d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e3e0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
1e3f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1e400 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
1e410 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
1e420 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
1e430 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1e440 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
1e450 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
1e460 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
1e470 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
1e480 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
1e490 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
1e4a0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
1e4b0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1e4c0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
1e4d0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
1e4e0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
1e4f0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
1e500 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
1e510 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
1e520 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
1e530 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
1e540 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
1e550 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
1e560 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
1e570 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
1e580 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
1e590 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
1e5a0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
1e5b0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
1e5c0 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
1e5d0 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
1e5e0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
1e5f0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
1e600 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
1e610 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1e620 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
1e630 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
1e640 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
1e650 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
1e660 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
1e670 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
1e680 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1e690 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
1e6a0 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
1e6b0 61 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ata: {.  int i =
1e6c0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
1e6d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
1e6e0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
1e6f0 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20   u32 n;..  pOut 
1e700 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1e710 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  p2];..  /* Note 
1e720 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
1e730 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
1e740 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
1e750 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
1e760 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  */.  assert( i>=
1e770 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1e780 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1e790 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
1e7a0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
1e7b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1e7c0 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73  P_RowKey );.  as
1e7d0 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65  sert( pC->isInde
1e7e0 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  x || pOp->opcode
1e7f0 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
1e800 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e820 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
1e830 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1e840 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  udoTable==0 );. 
1e850 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e860 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
1e870 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1e880 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1e890 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1e8a0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  (pC);.  if( rc )
1e8b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e8c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
1e8d0 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
1e8e0 20 20 20 69 36 34 20 6e 36 34 3b 0a 20 20 20 20     i64 n64;.    
1e8f0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
1e900 61 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c 69  able );.    sqli
1e910 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
1e920 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
1e930 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
1e940 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
1e950 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
1e960 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
1e970 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
1e980 69 6e 74 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  int)n64;.  }else
1e990 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
1e9a0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
1e9b0 2c 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 28  , &n);.    if( (
1e9c0 69 6e 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74  int)n>db->aLimit
1e9d0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1e9e0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1e9f0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1ea00 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
1ea10 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
1ea20 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
1ea30 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1ea40 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
1ea50 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
1ea60 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
1ea70 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
1ea80 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
1ea90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1eaa0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
1eab0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
1eac0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
1ead0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
1eae0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
1eaf0 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
1eb00 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1eb10 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
1eb20 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
1eb30 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
1eb40 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
1eb50 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
1eb60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1eb70 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
1eb80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
1eb90 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
1eba0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
1ebb0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
1ebc0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
1ebd0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
1ebe0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
1ebf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
1ec00 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
1ec10 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1ec20 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1ec30 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1ec40 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ec50 0a 20 20 69 36 34 20 76 3b 0a 0a 20 20 61 73 73  .  i64 v;..  ass
1ec60 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1ec70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1ec80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b  C = p->apCsr[i];
1ec90 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1eca0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1ecb0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1ecc0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1ecd0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ece0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
1ecf0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1ed00 69 64 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  id ){.    v = pC
1ed10 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
1ed20 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65  else if( pC->pse
1ed30 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
1ed40 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d  v = keyToInt(pC-
1ed50 3e 69 4b 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20  >iKey);.  }else 
1ed60 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
1ed70 29 7b 0a 20 20 20 20 2f 2a 20 4c 65 61 76 65 20  ){.    /* Leave 
1ed80 74 68 65 20 72 6f 77 69 64 20 73 65 74 20 74 6f  the rowid set to
1ed90 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62   a NULL */.    b
1eda0 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  reak;.  }else{. 
1edb0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
1edc0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
1edd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1ede0 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
1edf0 2c 20 26 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b  , &v);.    v = k
1ee00 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a  eyToInt(v);.  }.
1ee10 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
1ee20 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1ee30 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1ee40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1ee50 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
1ee60 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1ee70 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
1ee80 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
1ee90 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
1eea0 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
1eeb0 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
1eec0 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
1eed0 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
1eee0 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
1eef0 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
1ef00 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
1ef10 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1ef20 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
1ef30 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1ef40 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1ef50 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1ef60 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1ef70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ef80 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1ef90 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
1efa0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69  IsValid = 0;.  i
1efb0 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  f( pC->pCursor )
1efc0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
1efd0 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
1efe0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
1eff0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f000 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
1f010 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
1f020 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
1f030 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
1f040 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
1f050 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
1f060 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
1f070 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
1f080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1f090 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
1f0a0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
1f0b0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
1f0c0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
1f0d0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f0e0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
1f0f0 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
1f100 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
1f110 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
1f120 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
1f130 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
1f140 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
1f150 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
1f160 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
1f170 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1f180 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1f190 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1f1a0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1f1b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
1f1c0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1f1d0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1f1e0 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
1f1f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
1f200 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1f210 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1f220 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  sr!=0 );.  rc = 
1f230 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1f240 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
1f250 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
1f260 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
1f270 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1f280 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
1f290 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
1f2a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f2b0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
1f2c0 20 72 65 73 20 26 26 20 70 4f 70 2d 3e 70 32 3e   res && pOp->p2>
1f2d0 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1f2e0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1f2f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1f300 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
1f310 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
1f320 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
1f330 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
1f340 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
1f350 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
1f360 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
1f370 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
1f380 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
1f390 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
1f3a0 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
1f3b0 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
1f3c0 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
1f3d0 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
1f3e0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
1f3f0 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
1f400 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
1f410 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
1f420 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
1f430 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
1f440 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
1f450 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
1f460 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
1f470 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
1f480 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
1f490 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
1f4a0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
1f4b0 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
1f4c0 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
1f4d0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1f4e0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
1f4f0 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
1f500 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
1f510 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
1f520 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
1f530 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
1f540 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1f550 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
1f560 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
1f570 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
1f580 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
1f590 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
1f5a0 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
1f5b0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
1f5c0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
1f5d0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
1f5e0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
1f5f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
1f600 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
1f610 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
1f620 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
1f630 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
1f640 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
1f650 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
1f660 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1f670 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
1f680 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1f690 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
1f6a0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
1f6b0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1f6c0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
1f6d0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
1f6e0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
1f6f0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
1f700 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
1f710 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
1f720 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
1f730 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
1f740 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
1f750 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1f760 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f770 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1f780 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1f790 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1f7a0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1f7b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f7c0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1f7d0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1f7e0 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43   (pCrsr = pC->pC
1f7f0 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1f800 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f810 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
1f820 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
1f830 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
1f840 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
1f850 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f860 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1f870 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1f880 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
1f890 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1f8a0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d  }else{.    res =
1f8b0 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   1;.  }.  pC->nu
1f8c0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
1f8d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f8e0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
1f8f0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
1f900 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
1f910 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1f920 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f930 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
1f940 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
1f950 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
1f960 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1f970 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
1f980 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
1f990 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
1f9a0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
1f9b0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
1f9c0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
1f9d0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
1f9e0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
1f9f0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
1fa00 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
1fa10 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
1fa20 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
1fa30 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1fa40 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
1fa50 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
1fa60 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
1fa70 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
1fa80 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  -table..**.** Se
1fa90 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
1faa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
1fab0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1fac0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
1fad0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1fae0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
1faf0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
1fb00 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
1fb10 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
1fb20 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
1fb30 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
1fb40 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
1fb50 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
1fb60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
1fb70 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
1fb80 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
1fb90 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
1fba0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
1fbb0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1fbc0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
1fbd0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
1fbe0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
1fbf0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1fc00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  .*/.case OP_Prev
1fc10 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
1fc20 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
1fc30 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
1fc40 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
1fc50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1fc60 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
1fc70 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b  nt res;..  CHECK
1fc80 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
1fc90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fca0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1fcb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fcc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fcd0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1fce0 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
1fcf0 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
1fd00 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
1fd10 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1fd20 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1fd30 43 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20  Crsr );.  res = 
1fd40 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  1;.  assert( pC-
1fd50 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1fd60 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70  =0 );.  rc = pOp
1fd70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78  ->opcode==OP_Nex
1fd80 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65  t ? sqlite3Btree
1fd90 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73  Next(pCrsr, &res
1fda0 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) :.            
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72    sqlite3BtreePr
1fdd0 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72  evious(pCrsr, &r
1fde0 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
1fdf0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
1fe00 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fe10 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1fe20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1fe30 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1fe40 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  - 1;.    if( pOp
1fe50 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74  ->p5 ) p->aCount
1fe60 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b  er[pOp->p5-1]++;
1fe70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1fe80 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1fe90 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1fea0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d  #endif.  }.  pC-
1feb0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1fec0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
1fed0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
1fee0 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ert P1 P2 P3 * *
1fef0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
1ff00 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
1ff10 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
1ff20 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
1ff30 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
1ff40 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
1ff50 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
1ff60 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
1ff70 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
1ff80 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
1ff90 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
1ffa0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
1ffb0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
1ffc0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
1ffd0 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
1ffe0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
1fff0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
20000 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
20010 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
20020 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
20030 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
20040 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
20050 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
20060 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
20070 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
20080 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
20090 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
200a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
200b0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
200c0 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
200d0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
200e0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
200f0 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
20100 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
20110 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
20120 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 28 70  Blob );.  if( (p
20130 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e  Crsr = (pC = p->
20140 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
20150 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  or)!=0 ){.    as
20160 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20170 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
20180 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
20190 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
201a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
201b0 20 20 69 6e 74 20 6e 4b 65 79 20 3d 20 70 49 6e    int nKey = pIn
201c0 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73  2->n;.      cons
201d0 74 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d 20 70  t char *zKey = p
201e0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
201f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
20200 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
20210 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
20220 30 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20  0, pOp->p3);.   
20230 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
20240 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
20250 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
20260 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
20270 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
20280 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20290 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
202a0 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
202b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
202c0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
202d0 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
202e0 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
202f0 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
20300 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
20310 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
20320 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
20330 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
20340 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
20350 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
20360 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  elete: {.  int i
20370 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
20380 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20390 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
203a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
203b0 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
203c0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
203d0 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
203e0 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61  p->nMem+1 );.  a
203f0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
20400 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20410 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
20420 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
20430 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
20440 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
20450 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
20460 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
20470 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
20480 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
20490 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
204a0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
204b0 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20  16)pOp->p3;.    
204c0 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  r.flags = 0;.   
204d0 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d   r.aMem = &p->aM
204e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
204f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20500 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
20510 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
20520 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
20530 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
20540 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
20550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20560 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29  reeDelete(pCrsr)
20570 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
20580 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
20590 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
205a0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
205b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
205c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
205d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
205e0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
205f0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
20600 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
20610 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
20620 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
20630 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
20640 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
20650 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
20660 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
20670 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
20680 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
20690 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
206a0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
206b0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
206c0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
206d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
206e0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
206f0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
20700 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
20710 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
20720 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
20730 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
20740 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
20750 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  r;.  VdbeCursor 
20760 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
20770 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
20780 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20790 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
207a0 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
207b0 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
207c0 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
207d0 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20 72 6f  =0 ){.    i64 ro
207e0 77 69 64 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  wid;..    assert
207f0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
20800 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
20810 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20820 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
20830 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
20840 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
20850 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
20860 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
20870 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20880 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
20890 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
208a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
208b0 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65 74    }.      MemSet
208c0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
208d0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 70  EM_Int);.      p
208e0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
208f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
20900 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20910 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
20920 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
20930 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
20940 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
20950 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
20960 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
20970 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
20980 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
20990 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
209a0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
209b0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
209c0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
209d0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
209e0 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
209f0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
20a00 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
20a10 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
20a20 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
20a30 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
20a40 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
20a50 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
20a60 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
20a70 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
20a80 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
20a90 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
20aa0 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
20ab0 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
20ac0 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
20ad0 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68   .** prior to th
20ae0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
20af0 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63  his make the opc
20b00 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
20b10 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68  xGT except.** th
20b20 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72  at if the key fr
20b30 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69  om register P3 i
20b40 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
20b50 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72  e key in the cur
20b60 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75  sor,.** the resu
20b70 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72  lt is false wher
20b80 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20  eas it would be 
20b90 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e  true with IdxGT.
20ba0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
20bb0 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a 20  dxLT P1 P2 P3 * 
20bc0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
20bd0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
20be0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
20bf0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
20c00 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
20c10 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
20c20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
20c30 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
20c40 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
20c50 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
20c60 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
20c70 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
20c80 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
20c90 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
20ca0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
20cb0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
20cc0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
20cd0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
20ce0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
20cf0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
20d00 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
20d10 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
20d20 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
20d30 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
20d40 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
20d50 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
20d60 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
20d70 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
20d80 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
20d90 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
20da0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
20db0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
20dc0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
20dd0 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20   OP_IdxGE: {    
20de0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
20df0 20 2a 2f 0a 20 20 69 6e 74 20 69 3d 20 70 4f 70   */.  int i= pOp
20e00 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
20e10 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
20e20 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
20e30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
20e40 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d  ert( p->apCsr[i]
20e50 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
20e60 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
20e70 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
20e80 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
20e90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
20ea0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
20eb0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20ec0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
20ed0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
20ee0 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
20ef0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20f00 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
20f10 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
20f20 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
20f30 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
20f40 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
20f50 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
20f60 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
20f70 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
20f80 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
20f90 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
20fa0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20fb0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
20fc0 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
20fd0 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
20fe0 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
20ff0 2d 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20  ->p3];.    rc = 
21000 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
21010 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c  yCompare(pC, &r,
21020 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
21030 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21040 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72  IdxLT ){.      r
21050 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d  es = -res;.    }
21060 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
21070 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
21080 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20  =OP_IdxGE );.   
21090 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a     res++;.    }.
210a0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
210b0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
210c0 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a  >p2 - 1 ;.    }.
210d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
210e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
210f0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
21100 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
21110 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
21120 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
21130 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
21140 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
21150 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
21160 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
21170 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
21180 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
21190 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
211a0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
211b0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
211c0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
211d0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
211e0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
211f0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
21200 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
21210 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
21220 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
21230 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
21240 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
21250 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
21260 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
21270 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
21280 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
21290 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
212a0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
212b0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
212c0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
212d0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
212e0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
212f0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
21300 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
21310 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
21320 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
21330 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
21340 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
21350 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
21360 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
21370 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
21380 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
21390 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
213a0 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
213b0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
213c0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
213d0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
213e0 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
213f0 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
21400 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
21410 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
21420 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
21430 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
21440 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
21450 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
21460 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
21470 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
21480 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
21490 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
214a0 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
214b0 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66  .  int iCnt;.#if
214c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
214d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
214e0 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69  Vdbe *pVdbe;.  i
214f0 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70  Cnt = 0;.  for(p
21500 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20  Vdbe=db->pVdbe; 
21510 70 56 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64  pVdbe; pVdbe=pVd
21520 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  be->pNext){.    
21530 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63  if( pVdbe->magic
21540 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
21550 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61   && pVdbe->inVta
21560 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64  bMethod<2 && pVd
21570 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20  be->pc>=0 ){.   
21580 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d     iCnt++;.    }
21590 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e  .  }.#else.  iCn
215a0 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64  t = db->activeVd
215b0 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20  beCnt;.#endif.  
215c0 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20  if( iCnt>1 ){.  
215d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
215e0 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
215f0 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
21600 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ort;.  }else{.  
21610 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
21620 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
21630 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
21640 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
21650 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
21660 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  )!=0 );.    rc =
21670 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
21680 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
21690 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
216a0 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
216b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
216c0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
216d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
216e0 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
216f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
21700 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
21710 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
21720 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
21730 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
21740 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b  eMoved(&db->aDb[
21750 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f  iDb], iMoved, pO
21760 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65  p->p1);.    }.#e
21770 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
21780 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21790 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
217a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
217b0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
217c0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
217d0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
217e0 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
217f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
21800 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
21810 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
21820 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
21830 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
21840 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
21850 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
21860 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
21870 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
21880 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
21890 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
218a0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
218b0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
218c0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
218d0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
218e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
218f0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
21900 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
21910 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
21920 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
21930 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
21940 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
21950 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
21960 74 61 62 6c 65 20 72 65 66 65 72 65 64 20 74 6f  table refered to
21970 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
21980 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
21990 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
219a0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
219b0 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
219c0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
219d0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
219e0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
219f0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
21a00 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
21a10 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
21a20 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
21a30 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
21a40 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21a50 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
21a60 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
21a70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
21a80 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
21a90 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
21aa0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
21ab0 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
21ac0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
21ad0 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
21ae0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
21af0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
21b00 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63  >p2))!=0 );.  rc
21b10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
21b20 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
21b30 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
21b40 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
21b50 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
21b60 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
21b70 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
21b80 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
21b90 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
21ba0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
21bb0 20 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70       p->aMem[pOp
21bc0 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
21bd0 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
21be0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21bf0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
21c00 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
21c10 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
21c20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
21c30 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
21c40 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
21c50 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
21c60 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
21c70 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
21c80 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
21c90 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
21ca0 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
21cb0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
21cc0 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
21cd0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
21ce0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
21cf0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
21d00 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
21d10 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
21d20 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
21d30 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
21d40 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
21d50 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
21d60 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
21d70 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
21d80 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
21d90 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
21da0 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
21db0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
21dc0 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
21dd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
21de0 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
21df0 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
21e00 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
21e10 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
21e20 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
21e30 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
21e40 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
21e50 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
21e60 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
21e70 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
21e80 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
21e90 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
21ea0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
21eb0 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
21ec0 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
21ed0 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
21ee0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
21ef0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
21f00 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
21f10 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
21f20 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20  release */.case 
21f30 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
21f40 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
21f50 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
21f60 0a 20 20 69 6e 74 20 70 67 6e 6f 20 3d 20 30 3b  .  int pgno = 0;
21f70 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
21f80 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
21f90 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21fa0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
21fb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
21fc0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
21fd0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
21fe0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
21ff0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
22000 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
22010 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
22020 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61  >opcode==OP_Crea
22030 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  teTable ){.    /
22040 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f  * flags = BTREE_
22050 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66  INTKEY; */.    f
22060 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41  lags = BTREE_LEA
22070 46 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b  FDATA|BTREE_INTK
22080 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
22090 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a   flags = BTREE_Z
220a0 45 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72  ERODATA;.  }.  r
220b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
220c0 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
220d0 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61  >pBt, &pgno, fla
220e0 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  gs);.  pOut->u.i
220f0 20 3d 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65   = pgno;.  MemSe
22100 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
22110 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
22120 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22130 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
22140 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
22150 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
22160 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
22170 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
22180 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
22190 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
221a0 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
221b0 6c 61 75 73 65 20 50 34 2e 20 20 50 32 20 69 73  lause P4.  P2 is
221c0 20 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61   the "force" fla
221d0 67 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a  g.   Always do.*
221e0 2a 20 74 68 65 20 70 61 72 73 69 6e 67 20 69 66  * the parsing if
221f0 20 50 32 20 69 73 20 74 72 75 65 2e 20 20 49 66   P2 is true.  If
22200 20 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68   P2 is false, th
22210 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
22220 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66  is a.** no-op if
22230 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
22240 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61  ot currently loa
22250 64 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ded.  In other w
22260 6f 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69  ords, if P2.** i
22270 73 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c  s false, the SQL
22280 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
22290 20 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20   is only parsed 
222a0 69 66 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  if the rest of t
222b0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
222c0 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69  already loaded i
222d0 6e 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74  nto the symbol t
222e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  able..**.** This
222f0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
22300 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
22310 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
22320 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
22330 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
22340 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
22350 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
22360 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
22370 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
22380 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 63  rseSchema: {.  c
22390 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74  har *zSql;.  int
223a0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
223b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
223c0 61 73 74 65 72 3b 0a 20 20 49 6e 69 74 44 61 74  aster;.  InitDat
223d0 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 61  a initData;..  a
223e0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
223f0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
22400 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 32 20 26    if( !pOp->p2 &
22410 26 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79  & !DbHasProperty
22420 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
22430 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20  emaLoaded) ){.  
22440 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 7a    break;.  }.  z
22450 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
22460 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 69 6e  TABLE(iDb);.  in
22470 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
22480 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
22490 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 69 74   pOp->p1;.  init
224a0 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
224b0 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 7a  &p->zErrMsg;.  z
224c0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
224d0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 22 53  intf(db,.     "S
224e0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
224f0 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
22500 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 22  %q'.%s WHERE %s"
22510 2c 0a 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69  ,.     db->aDb[i
22520 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
22530 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
22540 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20    if( zSql==0 ) 
22550 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 28  goto no_mem;.  (
22560 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65  void)sqlite3Safe
22570 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 61 73 73  tyOff(db);.  ass
22580 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
22590 73 79 3d 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 69  sy==0 );.  db->i
225a0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
225b0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
225c0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
225d0 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
225e0 69 6c 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 73  iled );.  rc = s
225f0 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
22600 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
22610 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
22620 44 61 74 61 2c 20 30 29 3b 0a 20 20 69 66 28 20  Data, 0);.  if( 
22630 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
22640 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
22650 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
22660 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 64  e(db, zSql);.  d
22670 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
22680 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65  ;.  (void)sqlite
22690 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20  3SafetyOn(db);. 
226a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
226b0 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
226c0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
226d0 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
226e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
226f0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26  OMIT_ANALYZE) &&
22700 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22710 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a 2f 2a  _OMIT_PARSER)./*
22720 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
22730 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
22740 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
22750 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
22760 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
22770 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
22780 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
22790 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
227a0 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
227b0 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
227c0 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
227d0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
227e0 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
227f0 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
22800 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
22810 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
22820 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 69 6e 74  nalysis: {.  int
22830 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
22840 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
22850 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
22860 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
22870 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
22880 2c 20 69 44 62 29 3b 0a 20 20 62 72 65 61 6b 3b  , iDb);.  break;
22890 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
228a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
228b0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20  MIT_ANALYZE) && 
228c0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
228d0 4f 4d 49 54 5f 50 41 52 53 45 52 29 20 20 2a 2f  OMIT_PARSER)  */
228e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
228f0 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
22900 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
22910 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
22920 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
22930 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
22940 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
22950 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
22960 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
22970 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
22980 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
22990 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
229a0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
229b0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
229c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
229d0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
229e0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
229f0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
22a00 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
22a10 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
22a20 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
22a30 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
22a40 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
22a50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
22a60 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
22a70 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
22a80 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
22a90 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
22aa0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
22ab0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
22ac0 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
22ad0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
22ae0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
22af0 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
22b00 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
22b10 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
22b20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
22b30 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
22b40 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
22b50 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
22b60 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
22b70 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
22b80 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
22b90 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
22ba0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
22bb0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
22bc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22bd0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
22be0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
22bf0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
22c00 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
22c10 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
22c20 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
22c30 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
22c40 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
22c50 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
22c60 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
22c70 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
22c80 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
22c90 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
22ca0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
22cb0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
22cc0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
22cd0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
22ce0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
22cf0 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
22d00 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
22d10 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
22d20 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
22d30 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
22d40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22d50 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
22d60 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
22d70 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
22d80 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
22d90 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
22da0 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
22db0 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
22dc0 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
22dd0 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
22de0 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
22df0 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
22e00 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
22e10 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
22e20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
22e30 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
22e40 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
22e50 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
22e60 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
22e70 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
22e80 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
22e90 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
22ea0 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
22eb0 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
22ec0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
22ed0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
22ee0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
22ef0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
22f00 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
22f10 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
22f20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
22f30 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
22f40 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
22f50 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
22f60 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
22f70 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
22f80 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
22f90 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
22fa0 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
22fb0 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
22fc0 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
22fd0 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
22fe0 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
22ff0 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
23000 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
23010 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
23020 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
23030 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
23040 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
23050 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
23060 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
23070 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
23080 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
23090 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
230a0 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
230b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
230c0 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
230d0 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
230e0 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
230f0 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
23100 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
23110 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
23120 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
23130 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
23140 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
23150 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
23160 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
23170 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
23180 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
23190 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
231a0 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
231b0 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
231c0 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
231d0 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
231e0 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
231f0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20  s remaining */. 
23200 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d   .  nRoot = pOp-
23210 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
23220 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
23230 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
23240 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
23250 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
23260 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
23270 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
23280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23290 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
232a0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
232b0 6e 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  nErr = &p->aMem[
232c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
232d0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
232e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
232f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
23300 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
23310 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
23320 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
23330 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
23340 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  ];.  for(j=0; j<
23350 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20  nRoot; j++){.   
23360 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74   aRoot[j] = (int
23370 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  )sqlite3VdbeIntV
23380 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a  alue(&pIn1[j]);.
23390 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d    }.  aRoot[j] =
233a0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
233b0 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
233c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
233d0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
233e0 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
233f0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
23400 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
23410 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
23420 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
23430 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
23460 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
23470 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
23480 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
23490 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
234a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
234b0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
234c0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
234d0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
234e0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
234f0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
23500 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
23510 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
23520 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
23530 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
23540 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
23550 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
23560 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
23570 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
23580 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
23590 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
235a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
235b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
235c0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
235d0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
235e0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
235f0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
23600 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
23610 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
23620 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
23630 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
23640 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
23650 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
23660 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
23670 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
23680 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
23690 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
236a0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  {       /* in2 *
236b0 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20  /.  Mem *pIdx;. 
236c0 20 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73   Mem *pVal;.  as
236d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
236e0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
236f0 4d 65 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20  Mem );.  pIdx = 
23700 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
23710 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
23720 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
23730 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
23740 70 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pVal = &p->aMem[
23750 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
23760 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73  rt( (pVal->flags
23770 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
23780 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66  ;.  if( (pIdx->f
23790 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
237a0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
237b0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
237c0 77 53 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20  wSet(pIdx);.    
237d0 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73  if( (pIdx->flags
237e0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
237f0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
23800 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
23810 77 53 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d  wSetInsert(pIdx-
23820 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c  >u.pRowSet, pVal
23830 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
23840 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
23850 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
23860 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74  P3 * *.**.** Ext
23870 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
23880 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
23890 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
238a0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
238b0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
238c0 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
238d0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
238e0 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
238f0 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
23900 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
23910 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
23920 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
23930 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
23940 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74      /* jump, out
23950 33 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78  3 */.  Mem *pIdx
23960 3b 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61  ;.  i64 val;.  a
23970 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
23980 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
23990 6e 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f  nMem );.  CHECK_
239a0 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
239b0 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIdx = &p->aMem
239c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
239d0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
239e0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
239f0 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx->flags & MEM_
23a00 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
23a10 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
23a20 65 78 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77  ext(pIdx->u.pRow
23a30 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
23a40 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
23a50 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
23a60 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
23a70 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
23a80 6c 28 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20  l(pIdx);.    pc 
23a90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
23aa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
23ab0 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
23ac0 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
23ad0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
23ae0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
23af0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
23b00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
23b10 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
23b20 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72  , val);.  }.  br
23b30 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
23b40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
23b50 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GGER./* Opcode: 
23b60 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20 2a 20  ContextPush * * 
23b70 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68  * .**.** Save th
23b80 65 20 63 75 72 72 65 6e 74 20 56 64 62 65 20 63  e current Vdbe c
23b90 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68 61 74  ontext such that
23ba0 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
23bb0 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65 78 74  red by a Context
23bc0 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54  Pop.** opcode. T
23bd0 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65  he context store
23be0 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  s the last inser
23bf0 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61  t row id, the la
23c00 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61  st statement cha
23c10 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e  nge.** count, an
23c20 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  d the current st
23c30 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63  atement change c
23c40 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ount..*/.case OP
23c50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a  _ContextPush: {.
23c60 20 20 69 6e 74 20 69 20 3d 20 70 2d 3e 63 6f 6e    int i = p->con
23c70 74 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a  textStackTop++;.
23c80 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74    Context *pCont
23c90 65 78 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ext;..  assert( 
23ca0 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58  i>=0 );.  /* FIX
23cb0 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64   ME: This should
23cc0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73   be allocated as
23cd0 20 70 61 72 74 20 6f 66 20 74 68 65 20 76 64 62   part of the vdb
23ce0 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e at compile-tim
23cf0 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d  e */.  if( i>=p-
23d00 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70  >contextStackDep
23d10 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e  th ){.    p->con
23d20 74 65 78 74 53 74 61 63 6b 44 65 70 74 68 20 3d  textStackDepth =
23d30 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e   i+1;.    p->con
23d40 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71 6c 69  textStack = sqli
23d50 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
23d60 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78  ee(db, p->contex
23d70 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20 20 20  tStack,.        
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74    sizeof(Context
23db0 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20 69 66  )*(i+1));.    if
23dc0 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  ( p->contextStac
23dd0 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  k==0 ) goto no_m
23de0 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65  em;.  }.  pConte
23df0 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74  xt = &p->context
23e00 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e  Stack[i];.  pCon
23e10 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20  text->lastRowid 
23e20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
23e30 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68  .  pContext->nCh
23e40 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
23e50 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
23e60 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78  * Opcode: Contex
23e70 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a  tPop * * * .**.*
23e80 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20 56 64  * Restore the Vd
23e90 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20 74 68  be context to th
23ea0 65 20 73 74 61 74 65 20 69 74 20 77 61 73 20 69  e state it was i
23eb0 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74 50 75  n when contextPu
23ec0 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65  sh was last.** e
23ed0 78 65 63 75 74 65 64 2e 20 54 68 65 20 63 6f 6e  xecuted. The con
23ee0 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20  text stores the 
23ef0 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20  last insert row 
23f00 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61  id, the last sta
23f10 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65  tement.** change
23f20 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20   count, and the 
23f30 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
23f40 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a  t change count..
23f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65  */.case OP_Conte
23f60 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65  xtPop: {.  Conte
23f70 78 74 20 2a 70 43 6f 6e 74 65 78 74 20 3d 20 26  xt *pContext = &
23f80 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b  p->contextStack[
23f90 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  --p->contextStac
23fa0 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28  kTop];.  assert(
23fb0 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
23fc0 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e  Top>=0 );.  db->
23fd0 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e  lastRowid = pCon
23fe0 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  text->lastRowid;
23ff0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
24000 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67  pContext->nChang
24010 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  e;.  break;.}.#e
24020 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
24030 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
24040 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
24050 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
24060 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
24070 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
24080 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
24090 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
240a0 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
240b0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73  e maximum of its
240c0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a   current value.*
240d0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
240e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
240f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
24100 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
24110 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
24120 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
24130 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
24140 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
24150 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
24160 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
24170 32 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  2 */.  sqlite3Vd
24180 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
24190 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
241a0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
241b0 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
241c0 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
241d0 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
241e0 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
241f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
24200 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24210 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
24220 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
24230 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20  : IfPos P1 P2 * 
24240 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
24250 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
24260 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
24270 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50  eater, jump to P
24280 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  2..**.** It is i
24290 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
242a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
242b0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
242c0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
242d0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
242e0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
242f0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
24300 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
24310 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
24320 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
24330 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
24340 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
24350 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
24360 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
24370 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
24380 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
24390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
243a0 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a   IfNeg P1 P2 * *
243b0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
243c0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
243d0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
243e0 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  n zero, jump to 
243f0 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
24400 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
24410 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
24420 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
24430 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
24440 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
24450 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
24460 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
24470 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
24480 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67  */.case OP_IfNeg
24490 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
244a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73  mp, in1 */.  ass
244b0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
244c0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
244d0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
244e0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
244f0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
24500 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24510 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
24520 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
24530 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
24540 73 74 65 72 20 50 31 20 69 73 20 65 78 61 63 74  ster P1 is exact
24550 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
24560 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
24570 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
24580 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
24590 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
245a0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
245b0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
245c0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
245d0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
245e0 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
245f0 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
24600 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
24610 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  p, in1 */.  asse
24620 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
24630 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
24640 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
24650 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
24660 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
24670 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24680 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
24690 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
246a0 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
246b0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
246c0 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
246d0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
246e0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
246f0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
24700 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
24710 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
24720 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
24730 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65  unction.  Use re
24740 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20  gister.** P3 as 
24750 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  the accumulator.
24760 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
24770 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
24780 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
24790 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
247a0 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73  ccessors..*/.cas
247b0 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
247c0 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
247d0 35 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  5;.  int i;.  Me
247e0 6d 20 2a 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a  m *pMem, *pRec;.
247f0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
24800 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
24810 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
24820 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
24830 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e  );.  pRec = &p->
24840 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
24850 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
24860 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
24870 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
24880 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
24890 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
248a0 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
248b0 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e  .    storeTypeIn
248c0 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e  fo(pRec, encodin
248d0 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  g);.  }.  ctx.pF
248e0 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
248f0 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
24900 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
24910 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
24920 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
24930 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
24940 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
24950 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
24960 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
24970 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
24980 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
24990 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
249a0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
249b0 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
249c0 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
249d0 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  oll = 0;.  if( c
249e0 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
249f0 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
24a00 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
24a10 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
24a20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a30 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
24a40 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
24a50 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
24a60 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
24a70 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
24a80 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
24a90 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
24aa0 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
24ab0 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
24ac0 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73  l);.  if( ctx.is
24ad0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
24ae0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
24af0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
24b00 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
24b10 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
24b20 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
24b30 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
24b40 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
24b50 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
24b60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24b70 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
24b80 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
24b90 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
24ba0 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
24bb0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
24bc0 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
24bd0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
24be0 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
24bf0 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
24c00 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
24c10 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
24c20 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
24c30 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
24c40 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
24c50 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
24c60 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
24c70 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
24c80 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
24c90 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
24ca0 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
24cb0 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
24cc0 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
24cd0 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
24ce0 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
24cf0 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
24d00 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
24d10 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
24d20 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
24d30 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
24d40 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
24d50 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
24d60 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
24d70 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
24d80 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
24d90 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
24da0 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
24db0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
24dc0 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
24dd0 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
24de0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24df0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
24e00 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
24e10 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
24e20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24e30 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
24e40 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
24e50 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
24e60 49 54 45 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20  ITE_ERROR ){.   
24e70 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
24e80 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
24e90 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
24ea0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
24eb0 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
24ec0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
24ed0 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
24ee0 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
24ef0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
24f00 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
24f10 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
24f20 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
24f30 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
24f40 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65  eak;.}...#if !de
24f50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24f60 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
24f70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24f80 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
24f90 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
24fa0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
24fb0 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
24fc0 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
24fd0 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
24fe0 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
24ff0 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
25000 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
25010 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
25020 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
25030 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
25040 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
25050 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20  Vacuum: {.  if( 
25060 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
25070 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
25080 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
25090 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33   .  rc = sqlite3
250a0 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
250b0 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66  rrMsg, db);.  if
250c0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
250d0 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
250e0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
250f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
25100 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
25110 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
25120 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
25130 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
25140 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
25150 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
25160 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
25170 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
25180 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
25190 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
251a0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
251b0 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
251c0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
251d0 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
251e0 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
251f0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
25200 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
25210 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
25220 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
25230 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
25240 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
25250 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25260 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
25270 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
25280 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
25290 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
252a0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
252b0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
252c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
252d0 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
252e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
252f0 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
25300 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
25310 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
25320 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
25330 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
25340 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
25350 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
25360 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
25370 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
25380 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
25390 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
253a0 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
253b0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
253c0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
253d0 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
253e0 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
253f0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
25400 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
25410 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
25420 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
25430 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
25440 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
25450 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
25460 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
25470 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
25480 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
25490 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
254a0 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
254b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
254c0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
254d0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
254e0 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
254f0 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
25500 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
25510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
25520 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
25530 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
25540 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
25550 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
25560 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
25570 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
25580 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
25590 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
255a0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
255b0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
255c0 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  . .**.** If P1 i
255d0 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  s  the index of 
255e0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
255f0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
25600 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
25610 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
25620 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
25630 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
25640 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
25650 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
25660 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
25670 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
25680 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
25690 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
256a0 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
256b0 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
256c0 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
256d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
256e0 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
256f0 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
25700 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
25710 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
25720 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
25730 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
25740 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
25750 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d  .  int p1 = pOp-
25760 3e 70 31 3b 20 0a 20 20 75 38 20 69 73 57 72 69  >p1; .  u8 isWri
25770 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
25780 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
25790 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
257a0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
257b0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
257c0 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
257d0 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
257e0 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
257f0 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
25800 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25810 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
25820 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
25830 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
25840 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
25850 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
25860 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
25870 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
25880 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
25890 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
258a0 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  b, "database tab
258b0 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
258c0 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ", z);.  }.  bre
258d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
258e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
258f0 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
25900 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25910 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
25920 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
25930 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
25940 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
25950 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
25960 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
25970 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
25980 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
25990 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
259a0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
259b0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
259c0 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
259d0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
259e0 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
259f0 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
25a00 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
25a10 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
25a20 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
25a30 74 20 69 73 2c 20 73 65 74 20 74 68 65 0a 2a 2a  t is, set the.**
25a40 20 65 72 72 6f 72 20 63 6f 64 65 20 74 6f 20 53   error code to S
25a50 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
25a60 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
25a70 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
25a80 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  b *pVtab = pOp->
25a90 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
25aa0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
25ab0 6e 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  n(db, pVtab);.  
25ac0 69 66 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20  if( pVtab ){.   
25ad0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
25ae0 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
25af0 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
25b00 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
25b10 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
25b20 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  Msg = 0;.  }.  b
25b30 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
25b40 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
25b50 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
25b60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25b70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
25b80 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
25b90 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
25ba0 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
25bb0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
25bc0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
25bd0 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
25be0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
25bf0 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
25c00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
25c10 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
25c20 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
25c30 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
25c40 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
25c50 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
25c60 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
25c70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25c80 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
25c90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25ca0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
25cb0 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
25cc0 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
25cd0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
25ce0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
25cf0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
25d00 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
25d10 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
25d20 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
25d30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
25d40 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
25d50 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
25d60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
25d70 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
25d80 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
25d90 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
25da0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
25db0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
25dc0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
25dd0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
25de0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25df0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
25e00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
25e10 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
25e20 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
25e30 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
25e40 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
25e50 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
25e60 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
25e70 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
25e80 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
25e90 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
25ea0 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
25eb0 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
25ec0 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
25ed0 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
25ee0 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
25ef0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 30  Cursor *pCur = 0
25f00 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
25f10 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
25f20 72 73 6f 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c  rsor = 0;..  sql
25f30 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
25f40 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
25f50 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
25f60 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73  le *pModule = (s
25f70 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
25f80 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
25f90 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
25fa0 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69  && pModule);.  i
25fb0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
25fc0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
25fd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
25fe0 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  se;.  rc = pModu
25ff0 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
26000 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
26010 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
26020 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
26030 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
26040 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
26050 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
26060 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
26070 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
26080 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26090 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66  _to_misuse;.  if
260a0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
260b0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
260c0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
260d0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
260e0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
260f0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
26100 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
26110 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
26120 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
26130 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
26140 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
26150 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
26160 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
26170 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
26180 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
26190 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
261a0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
261b0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
261c0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
261d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
261e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
261f0 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
26200 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
26210 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
26220 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26230 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
26240 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
26250 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
26260 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26270 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
26280 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
26290 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
262a0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
262b0 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
262c0 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
262d0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
262e0 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
262f0 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
26300 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
26310 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
26320 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
26330 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
26340 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
26350 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
26360 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
26370 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
26380 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
26390 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
263a0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
263b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
263c0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
263d0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
263e0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
263f0 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
26400 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
26410 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
26420 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
26430 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
26440 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
26450 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
26460 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
26470 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
26480 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
26490 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
264a0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
264b0 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
264c0 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
264d0 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
264e0 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
264f0 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
26500 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
26510 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
26520 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
26530 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
26540 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
26550 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
26560 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
26570 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
26580 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
26590 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
265a0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
265b0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
265c0 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
265d0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
265e0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
265f0 2a 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61 4d  *pQuery = &p->aM
26600 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d  em[pOp->p3];.  M
26610 65 6d 20 2a 70 41 72 67 63 20 3d 20 26 70 51 75  em *pArgc = &pQu
26620 65 72 79 5b 31 5d 3b 0a 20 20 73 71 6c 69 74 65  ery[1];.  sqlite
26630 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
26640 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
26650 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
26660 62 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  b;..  VdbeCursor
26670 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
26680 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52  r[pOp->p1];..  R
26690 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
266a0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
266b0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
266c0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
266d0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
266e0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
266f0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
26700 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
26710 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
26720 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
26730 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
26740 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
26750 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
26760 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
26770 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
26780 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
26790 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
267a0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
267b0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
267c0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
267d0 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
267e0 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
267f0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
26800 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20    int res = 0;. 
26810 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 4d 65     int i;.    Me
26820 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61  m **apArg = p->a
26830 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20  pArg;.    for(i 
26840 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
26850 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  ){.      apArg[i
26860 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
26870 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70 65  .      storeType
26880 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30  Info(apArg[i], 0
26890 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  );.    }..    if
268a0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
268b0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
268c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
268d0 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  e;.    sqlite3Vt
268e0 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
268f0 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
26900 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
26910 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
26920 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
26930 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
26940 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
26950 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
26960 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  hod = 0;.    sql
26970 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
26980 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
26990 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
269a0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  ab->zErrMsg;.   
269b0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
269c0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
269d0 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70  VtabUnlock(db, p
269e0 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
269f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
26a00 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64        res = pMod
26a10 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43  ule->xEof(pVtabC
26a20 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
26a30 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
26a40 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
26a50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
26a60 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72  suse;..    if( r
26a70 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
26a80 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
26a90 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
26aa0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
26ab0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
26ac0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
26ad0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
26ae0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26af0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26b00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 6f 77  ./* Opcode: VRow
26b10 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
26b20 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 74 6f 20  *.** Store into 
26b30 72 65 67 69 73 74 65 72 20 50 32 20 20 74 68 65  register P2  the
26b40 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 74 68 65   rowid of.** the
26b50 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
26b60 68 61 74 20 74 68 65 20 50 31 20 63 75 72 73 6f  hat the P1 curso
26b70 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
26b80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 6f  ..*/.case OP_VRo
26b90 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
26ba0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
26bb0 6c 65 61 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74  lease */.  sqlit
26bc0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
26bd0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
26be0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
26bf0 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
26c00 69 52 6f 77 3b 0a 20 20 56 64 62 65 43 75 72 73  iRow;.  VdbeCurs
26c10 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
26c20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20  Csr[pOp->p1];.. 
26c30 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
26c40 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
26c50 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
26c60 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
26c70 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
26c80 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
26c90 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
26ca0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
26cb0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
26cc0 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
26cd0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
26ce0 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
26cf0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26d00 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
26d10 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
26d20 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
26d30 2c 20 26 69 52 6f 77 29 3b 0a 20 20 73 71 6c 69  , &iRow);.  sqli
26d40 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
26d50 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
26d60 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
26d70 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
26d80 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
26d90 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
26da0 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
26db0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
26dc0 73 75 73 65 3b 0a 20 20 4d 65 6d 53 65 74 54 79  suse;.  MemSetTy
26dd0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
26de0 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  _Int);.  pOut->u
26df0 2e 69 20 3d 20 69 52 6f 77 3b 0a 20 20 62 72 65  .i = iRow;.  bre
26e00 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
26e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26e20 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
26e30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26e40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
26e50 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
26e60 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26e70 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
26e80 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
26e90 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
26ea0 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
26eb0 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
26ec0 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
26ed0 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
26ee0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26ef0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
26f00 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
26f10 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
26f20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
26f30 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
26f40 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
26f50 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
26f60 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
26f70 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
26f80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26f90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
26fa0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
26fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26fc0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
26fd0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
26fe0 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d  pDest = &p->aMem
26ff0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
27000 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
27010 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
27020 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
27030 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
27040 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
27050 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
27060 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
27070 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
27080 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
27090 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
270a0 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
270b0 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
270c0 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a  Context));..  /*
270d0 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
270e0 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
270f0 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
27100 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
27110 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74  the current cont
27120 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74  ents to sContext
27130 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
27140 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
27150 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68  .  ** can use th
27160 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
27170 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
27180 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
27190 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65   a .  ** new one
271a0 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
271b0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f  VdbeMemMove(&sCo
271c0 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b  ntext.s, pDest);
271d0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
271e0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d  g(&sContext.s, M
271f0 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28  EM_Null);..  if(
27200 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
27210 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
27220 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
27230 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
27240 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
27250 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
27260 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
27270 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
27280 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
27290 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
272a0 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
272b0 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
272c0 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f  sg = 0;..  /* Co
272d0 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
272e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
272f0 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
27300 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69  . We.  ** do thi
27310 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  s regardless of 
27320 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
27330 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64 20  n error occured 
27340 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
27350 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
27360 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
27370 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
27380 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
27390 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
273a0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
273b0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
273c0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
273d0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
273e0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71  p3, pDest);.  sq
273f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
27400 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
27410 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  t.s);.  UPDATE_M
27420 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
27430 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
27440 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
27450 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  {.    goto abort
27460 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
27470 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
27480 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
27490 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
274a0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
274b0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
274c0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
274d0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
274e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
274f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27500 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
27510 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
27520 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
27530 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
27540 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
27550 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
27560 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
27570 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
27580 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
27590 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
275a0 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
275b0 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
275c0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
275d0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
275e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
275f0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
27600 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
27610 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
27620 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
27630 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
27640 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
27650 20 3d 20 30 3b 0a 0a 20 20 56 64 62 65 43 75 72   = 0;..  VdbeCur
27660 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
27670 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27680 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
27690 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
276a0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
276b0 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
276c0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
276d0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
276e0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
276f0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
27700 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
27710 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
27720 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
27730 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
27740 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
27750 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
27760 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
27770 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
27780 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
27790 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
277a0 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
277b0 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
277c0 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
277d0 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
277e0 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
277f0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
27800 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
27810 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
27820 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
27830 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
27840 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
27850 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
27860 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
27870 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
27880 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
27890 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
278a0 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
278b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
278c0 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  use;.  sqlite3Vt
278d0 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
278e0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
278f0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f   = 1;.  rc = pMo
27900 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
27910 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
27920 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
27930 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  d = 0;.  sqlite3
27940 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
27950 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
27960 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
27970 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
27980 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73  zErrMsg = 0;.  s
27990 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
279a0 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  (db, pVtab);.  i
279b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
279c0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
279d0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
279e0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
279f0 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
27a00 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
27a10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27a20 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28  o_misuse;..  if(
27a30 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
27a40 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
27a50 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
27a60 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
27a70 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
27a80 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
27a90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27aa0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
27ab0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27ac0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
27ad0 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20  Opcode: VRename 
27ae0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27af0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
27b00 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
27b10 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
27b20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
27b30 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
27b40 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
27b50 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
27b60 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
27b70 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   The value.** in
27b80 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
27b90 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e  passed as the zN
27ba0 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ame argument to 
27bb0 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  the xRename meth
27bc0 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  od..*/.case OP_V
27bd0 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69  Rename: {.  sqli
27be0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20  te3_vtab *pVtab 
27bf0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
27c00 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d 20  .  Mem *pName = 
27c10 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
27c20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
27c30 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
27c40 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53 54  name );.  REGIST
27c50 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
27c60 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72  , pName);..  Str
27c70 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e  ingify(pName, en
27c80 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20  coding);..  if( 
27c90 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
27ca0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
27cb0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
27cc0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  .  sqlite3VtabLo
27cd0 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63 20  ck(pVtab);.  rc 
27ce0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
27cf0 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
27d00 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71   pName->z);.  sq
27d10 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
27d20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
27d30 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
27d40 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56  b->zErrMsg;.  pV
27d50 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
27d60 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55  ;.  sqlite3VtabU
27d70 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29  nlock(db, pVtab)
27d80 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
27d90 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
27da0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27db0 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b  misuse;..  break
27dc0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
27dd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27de0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
27df0 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
27e00 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
27e10 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
27e20 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
27e30 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
27e40 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
27e50 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
27e60 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
27e70 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
27e80 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
27e90 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
27ea0 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
27eb0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
27ec0 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
27ed0 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
27ee0 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
27ef0 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
27f00 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
27f10 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
27f20 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
27f30 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
27f40 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
27f50 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
27f60 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
27f70 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
27f80 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
27f90 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
27fa0 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
27fb0 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
27fc0 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
27fd0 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
27fe0 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
27ff0 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
28000 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
28010 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
28020 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
28030 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
28040 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
28050 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
28060 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
28070 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
28080 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
28090 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
280a0 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
280b0 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
280c0 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
280d0 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
280e0 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
280f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
28100 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
28110 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
28120 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
28130 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
28140 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
28150 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
28160 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
28170 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
28180 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
28190 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
281a0 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
281b0 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
281c0 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
281d0 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
281e0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
281f0 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
28200 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
28210 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
28220 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
28230 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
28240 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
28250 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f  vtab *pVtab = pO
28260 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73  p->p4.pVtab;.  s
28270 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
28280 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
28290 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
282a0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74  ->pModule;.  int
282b0 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
282c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
282d0 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
282e0 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75 6c 65  );.  if( pModule
282f0 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a  ->xUpdate==0 ){.
28300 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
28310 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
28320 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e 6c 79  , db, "read-only
28330 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 72 63   table");.    rc
28340 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
28350 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e  .  }else{.    in
28360 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f  t i;.    sqlite_
28370 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 20  int64 rowid;.   
28380 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70   Mem **apArg = p
28390 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d 65 6d  ->apArg;.    Mem
283a0 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b   *pX = &p->aMem[
283b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
283c0 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
283d0 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72 65  ++){.      store
283e0 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b  TypeInfo(pX, 0);
283f0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
28400 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
28410 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
28420 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
28430 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
28440 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
28450 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
28460 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20  Lock(pVtab);.   
28470 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
28480 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
28490 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
284a0 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  d);.    sqlite3D
284b0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
284c0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
284d0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
284e0 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
284f0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
28500 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 55      sqlite3VtabU
28510 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29  nlock(db, pVtab)
28520 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
28530 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
28540 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28550 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 69 66  o_misuse;.    if
28560 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72 63 3d  ( pOp->p1 && rc=
28570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
28580 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
28590 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
285a0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
285b0 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
285c0 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
285d0 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
285e0 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67   }.    p->nChang
285f0 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  e++;.  }.  break
28600 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
28610 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28620 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
28630 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
28640 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
28650 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
28660 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
28670 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
28680 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
28690 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
286a0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
286b0 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
286c0 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
286d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
286e0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
286f0 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70  /.  int p1 = pOp
28700 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e 50 61  ->p1; .  int nPa
28710 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61  ge;.  Pager *pPa
28720 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
28730 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b  eePager(db->aDb[
28740 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72 63 20  p1].pBt);..  rc 
28750 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 50 61  = sqlite3PagerPa
28760 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72 2c 20  gecount(pPager, 
28770 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28 20 72  &nPage);.  if( r
28780 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
28790 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
287a0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
287b0 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65  Out->u.i = nPage
287c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
287d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
287e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
287f0 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  CE./* Opcode: Tr
28800 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ace * * * P4 *.*
28810 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
28820 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
28830 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
28840 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
28850 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
28860 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
28870 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
28880 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
28890 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73  callback..*/.cas
288a0 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20  e OP_Trace: {.  
288b0 63 68 61 72 20 2a 7a 54 72 61 63 65 20 3d 20 28  char *zTrace = (
288c0 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
288d0 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
288e0 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29  ;.  if( zTrace )
288f0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54  {.    if( db->xT
28900 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64 62  race ){.      db
28910 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
28920 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65 29 3b  aceArg, zTrace);
28930 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
28940 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
28950 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
28960 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
28970 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
28980 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
28990 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
289a0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  ", zTrace);.    
289b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
289c0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a  TE_DEBUG */.  }.
289d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
289e0 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  f.../* Opcode: N
289f0 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
28a00 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
28a10 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
28a20 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
28a30 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
28a40 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
28a50 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
28a60 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
28a70 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
28a80 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
28a90 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
28aa0 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
28ab0 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
28ac0 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
28ad0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28ae0 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
28af0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
28b00 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
28b10 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
28b20 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
28b30 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
28b40 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
28b50 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
28b60 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
28b70 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
28b80 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
28b90 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
28ba0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
28bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
28c00 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
28c10 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
28c20 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
28c30 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
28c40 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
28c50 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
28c60 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
28c70 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
28c80 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
28c90 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
28ca0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
28cb0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
28cc0 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
28cd0 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
28ce0 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
28cf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28d30 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
28d40 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
28d50 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
28d60 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
28d70 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
28d80 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
28d90 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
28da0 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
28db0 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
28dc0 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
28dd0 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
28de0 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
28df0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
28e00 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
28e10 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72  igPc, &p->aOp[or
28e20 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  igPc]);.#endif. 
28e30 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
28e40 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
28e50 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68  g code adds noth
28e60 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61  ing to the actua
28e70 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  l functionality.
28e80 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72      ** of the pr
28e90 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e  ogram.  It is on
28ea0 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74  ly here for test
28eb0 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
28ec0 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65  g..    ** On the
28ed0 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20   other hand, it 
28ee0 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79  does burn CPU cy
28ef0 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20  cles every time 
28f00 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
28f10 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f  he evaluator loo
28f20 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65  p.  So we can le
28f30 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20  ave it out when 
28f40 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  NDEBUG is define
28f50 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65  d..    */.#ifnde
28f60 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73  f NDEBUG.    ass
28f70 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70  ert( pc>=-1 && p
28f80 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66  c<p->nOp );..#if
28f90 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28fa0 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
28fb0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
28fc0 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70  c!=0 ) fprintf(p
28fd0 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e  ->trace,"rc=%d\n
28fe0 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
28ff0 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50   opProperty & OP
29000 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
29010 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ASE ){.        r
29020 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
29030 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20  trace, pOp->p2, 
29040 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pOut);.      }. 
29050 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65       if( opPrope
29060 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
29070 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
29080 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
29090 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ce, pOp->p3, pOu
290a0 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
290b0 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
290c0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
290d0 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
290e0 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
290f0 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
29100 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
29110 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
29120 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
29130 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
29140 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
29150 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
29160 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
29170 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
29180 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f  kind..  */.vdbe_
29190 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73  error_halt:.  as
291a0 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d  sert( rc );.  p-
291b0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
291c0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
291d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
291e0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64  _IOERR_NOMEM ) d
291f0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
29200 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  = 1;.  rc = SQLI
29210 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20  TE_ERROR;..  /* 
29220 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
29230 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73   way out of this
29240 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20   procedure.  We 
29250 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c  have to.  ** rel
29260 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73  ease the mutexes
29270 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20   on btrees that 
29280 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74  were acquired at
29290 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a   the.  ** top. *
292a0 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20  /.vdbe_return:. 
292b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74   sqlite3BtreeMut
292c0 65 78 41 72 72 61 79 4c 65 61 76 65 28 26 70 2d  exArrayLeave(&p-
292d0 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  >aMutex);.  retu
292e0 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
292f0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
29300 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
29310 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
29320 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
29330 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
29340 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
29350 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29360 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29370 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
29380 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
29390 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
293a0 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
293b0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
293c0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
293d0 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
293e0 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
293f0 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
29400 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
29410 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
29420 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
29430 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
29440 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
29450 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
29460 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
29470 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
29480 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  or an SQLITE_MIS
29490 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a  USE error..  */.
294a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
294b0 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c 49  use:.  rc = SQLI
294c0 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a 20  TE_MISUSE;.  /* 
294d0 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 61  Fall thru into a
294e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
294f0 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  r */..  /* Jump 
29500 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
29510 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
29520 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
29530 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
29540 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
29550 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
29560 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
29570 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
29580 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
29590 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
295a0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
295b0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
295c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
295d0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
295e0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
295f0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
29600 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
29610 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
29620 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
29630 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
29640 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
29650 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
29660 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
29670 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
29680 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
29690 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
296a0 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
296b0 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
296c0 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
296d0 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
296e0 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
296f0 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
29700 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
29710 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
29720 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
29730 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
29740 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.