/ Hex Artifact Content
Login

Artifact 965247d966bb5bc9db819e27c076c8acd43ea4fd:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
0870: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
0880: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
0890: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08a0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08b0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
08c0: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
08d0: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
08e0: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
08f0: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0900: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0910: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0920: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0930: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0940: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0950: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0960: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0970: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0980: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0990: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09a0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
09c0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
09d0: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
09e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
09f0: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a00: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a10: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a20: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a30: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a40: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a50: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0a60: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0a70: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0a80: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0a90: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0aa0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0ab0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0ac0: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0ad0: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0ae0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0af0: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b00: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b10: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b20: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b30: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b40: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b50: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0b60: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0b70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0b80: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0b90: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0ba0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bb0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0bc0: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0bd0: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0be0: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0bf0: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c00: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c10: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c20: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c30: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c40: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c50: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0c60: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0c70: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0c80: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0c90: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ca0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0cc0: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0cd0: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0ce0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0cf0: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d00: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d10: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d20: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d30: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d40: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d50: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0d60: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0d70: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0d80: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0d90: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0da0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0db0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0dc0: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0dd0: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0de0: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0df0: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e00: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e10: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e20: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e30: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e40: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e50: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0e60: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0e70: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0e80: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0e90: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ea0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0eb0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0ec0: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0ed0: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0ee0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0ef0: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f00: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f10: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0f20: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0f30: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0f40: 79 70 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64  ype the OP_Found
0f50: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0f60: 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73 20  ecuted. This is 
0f70: 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65  used to test whe
0f80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
0f90: 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f  foreign key.** o
0fa0: 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  peration impleme
0fb0: 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b  nted using OP_Fk
0fc0: 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e  IsZero is workin
0fd0: 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  g. This variable
0fe0: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
0ff0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
1000: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
1010: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
1020: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
1030: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
1040: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
1050: 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1060: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
1070: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72  ../*.** Test a r
1080: 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20 69  egister to see i
1090: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
10a0: 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d   current maximum
10b0: 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49   blob size..** I
10c0: 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72  f it does, recor
10d0: 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75  d the new maximu
10e0: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a  m blob size..*/.
10f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1100: 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65 66  TE_TEST) && !def
1110: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1120: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23  _BUILTIN_TEST).#
1130: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1140: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20  AX_BLOBSIZE(P)  
1150: 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a  updateMaxBlobsiz
1160: 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  e(P).#else.# def
1170: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1180: 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69  LOBSIZE(P).#endi
1190: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
11a0: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
11b0: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
11c0: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
11d0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
11e0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
11f0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1200: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
1210: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
1220: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1230: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1240: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1250: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1260: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
1270: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
1280: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
1290: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12a0: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
12b0: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
12c0: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
12d0: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
12e0: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
12f0: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
1300: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
1310: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
1320: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
1330: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
1340: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1350: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
1360: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
1370: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
1380: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
1390: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
13a0: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
13b0: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
13c0: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
13d0: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
13e0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
13f0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
1400: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
1410: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
1420: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
1430: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1440: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1450: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
1460: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
1470: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
1480: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1490: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
14a0: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
14b0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
14c0: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
14d0: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
14e0: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
14f0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  no_mem;}../*.** 
1500: 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64 62 65  Call sqlite3Vdbe
1510: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 29 20  MemExpandBlob() 
1520: 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  on the supplied 
1530: 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65 6d 2a  value (type Mem*
1540: 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75 69 72  ).** P if requir
1550: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ed..*/.#define E
1560: 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28 28 28  xpandBlob(P) (((
1570: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  P)->flags&MEM_Ze
1580: 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62 65 4d  ro)?sqlite3VdbeM
1590: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a  emExpandBlob(P):
15a0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65  0)../*.** Argume
15b0: 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61  nt pMem points a
15c0: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  t a register tha
15d0: 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64  t will be passed
15e0: 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65   to a.** user-de
15f0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f  fined function o
1600: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  r returned to th
1610: 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72 65  e user as the re
1620: 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e  sult of a query.
1630: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
1640: 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e   sets the pMem->
1650: 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75 73  type variable us
1660: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1670: 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20  3_value_*() .** 
1680: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69  routines..*/.voi
1690: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
16a0: 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a 70  StoreType(Mem *p
16b0: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67  Mem){.  int flag
16c0: 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  s = pMem->flags;
16d0: 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  .  if( flags & M
16e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
16f0: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1700: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65  TE_NULL;.  }.  e
1710: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1720: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1740: 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a  TE_INTEGER;.  }.
1750: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1760: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
1770: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1780: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20  SQLITE_FLOAT;.  
1790: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
17a0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs & MEM_Str ){.
17b0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17c0: 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20   SQLITE_TEXT;.  
17d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d  }else{.    pMem-
17e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42  >type = SQLITE_B
17f0: 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  LOB;.  }.}../*.*
1800: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1810: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1820: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1830: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1840: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1850: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1860: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1870: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
1880: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
1890: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18a0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18b0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18c0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18d0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
18e0: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
18f0: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1900: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1910: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1920: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1930: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1940: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1950: 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61      /* When data
1960: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1970: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1980: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1990: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
19a0: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
19b0: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
19c0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
19d0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
19e0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
19f0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1a00: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1a10: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1a20: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1a30: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1a40: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1a50: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1a60: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1a70: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1a80: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1a90: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1aa0: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1ab0: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ac0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1ad0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1ae0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1af0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1b00: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1b10: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1b20: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1b30: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1b40: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1b50: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1b60: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1b70: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1b80: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1b90: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1ba0: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1bb0: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1bc0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1bd0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1be0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1bf0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1c00: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1c10: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1c20: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1c30: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1c40: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1c50: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1c60: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1c70: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1c80: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1c90: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1ca0: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1cb0: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1cc0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1cd0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1ce0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1cf0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1d00: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1d10: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1d20: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1d30: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1d40: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1d50: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1d60: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1d70: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1d80: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1d90: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1da0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1db0: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1dc0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1dd0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1de0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1df0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1e00: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e10: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1e20: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1e30: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1e40: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1e50: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1e60: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1e70: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1e80: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1e90: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1ea0: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1eb0: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1ec0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1ed0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1ee0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1ef0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1f00: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1f10: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
1f20: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
1f30: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f40: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
1f50: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
1f60: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
1f70: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
1f80: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
1f90: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
1fa0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
1fb0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fc0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
1fd0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
1fe0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
1ff0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
2000: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
2010: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2020: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2030: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2040: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2050: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2060: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2070: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2080: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2090: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
20a0: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
20b0: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
20c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
20d0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
20e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
20f0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
2100: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2110: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2120: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2130: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2140: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2150: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2160: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2170: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2180: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2190: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
21a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
21b0: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
21c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
21d0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
21e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e  ){.    int realn
21f0: 75 6d 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d  um;.    u8 enc =
2200: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20   pRec->enc;.    
2210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2220: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2230: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2240: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2250: 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  && sqlite3IsNumb
2260: 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61  er(pRec->z, &rea
2270: 6c 6e 75 6d 2c 20 65 6e 63 29 20 29 7b 0a 20 20  lnum, enc) ){.  
2280: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
2290: 20 20 20 20 20 63 68 61 72 20 2a 7a 55 74 66 38       char *zUtf8
22a0: 20 3d 20 70 52 65 63 2d 3e 7a 3b 0a 23 69 66 6e   = pRec->z;.#ifn
22b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22c0: 55 54 46 31 36 0a 20 20 20 20 20 20 69 66 28 20  UTF16.      if( 
22d0: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc!=SQLITE_UTF8
22e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
22f0: 72 74 28 20 70 52 65 63 2d 3e 64 62 20 29 3b 0a  rt( pRec->db );.
2300: 20 20 20 20 20 20 20 20 7a 55 74 66 38 20 3d 20          zUtf8 = 
2310: 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
2320: 70 52 65 63 2d 3e 64 62 2c 20 70 52 65 63 2d 3e  pRec->db, pRec->
2330: 7a 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  z, pRec->n, enc)
2340: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 7a  ;.        if( !z
2350: 55 74 66 38 20 29 20 72 65 74 75 72 6e 3b 0a 20  Utf8 ) return;. 
2360: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
2370: 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e 75 6d      if( !realnum
2380: 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f 69 36   && sqlite3Atoi6
2390: 34 28 7a 55 74 66 38 2c 20 26 76 61 6c 75 65 29  4(zUtf8, &value)
23a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63   ){.        pRec
23b0: 2d 3e 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20  ->u.i = value;. 
23c0: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
23d0: 65 46 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f  eFlag(pRec, MEM_
23e0: 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Int);.      }els
23f0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2400: 65 33 41 74 6f 46 28 7a 55 74 66 38 2c 20 26 70  e3AtoF(zUtf8, &p
2410: 52 65 63 2d 3e 72 29 3b 0a 20 20 20 20 20 20 20  Rec->r);.       
2420: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2430: 70 52 65 63 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pRec, MEM_Real);
2440: 0a 20 20 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  .      }.#ifndef
2450: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2460: 31 36 0a 20 20 20 20 20 20 69 66 28 20 65 6e 63  16.      if( enc
2470: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
2480: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2490: 44 62 46 72 65 65 28 70 52 65 63 2d 3e 64 62 2c  DbFree(pRec->db,
24a0: 20 7a 55 74 66 38 29 3b 0a 20 20 20 20 20 20 7d   zUtf8);.      }
24b0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
24c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
24d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
24e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
24f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2500: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2510: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2520: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2530: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2540: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2550: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2560: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2570: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2580: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2590: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
25a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
25b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
25d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
25e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
25f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2600: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2610: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2620: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2630: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2640: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2650: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2660: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2670: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2680: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2690: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
26a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
26b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
26c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
26d0: 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20  _AFF_NONE:.**   
26e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
26f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2700: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2710: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2720: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2730: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2740: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2750: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2760: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2770: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2780: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2790: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
27a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
27b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
27c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
27d0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
27e0: 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  T ){.    /* Only
27f0: 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e   attempt the con
2800: 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20  version to TEXT 
2810: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  if there is an i
2820: 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20  nteger or real. 
2830: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
2840: 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e  tion (blob and N
2850: 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63  ULL do not get c
2860: 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f  onverted) but no
2870: 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72   string.    ** r
2880: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20  epresentation.. 
2890: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d     */.    if( 0=
28a0: 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  =(pRec->flags&ME
28b0: 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d  M_Str) && (pRec-
28c0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
28d0: 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20  |MEM_Int)) ){.  
28e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28f0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63  emStringify(pRec
2900: 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20  , enc);.    }.  
2910: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d    pRec->flags &=
2920: 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f   ~(MEM_Real|MEM_
2930: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Int);.  }else if
2940: 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49  ( affinity!=SQLI
2950: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
2960: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2970: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2980: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2990: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
29a0: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
29b0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
29c0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
29d0: 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  C );.    applyNu
29e0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52  mericAffinity(pR
29f0: 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  ec);.    if( pRe
2a00: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2a10: 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eal ){.      sql
2a20: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2a30: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2a40: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
2a50: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2a60: 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66   the type of a f
2a70: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
2a80: 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c   or a result col
2a90: 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75  umn.** into a nu
2aa0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2ab0: 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65  tion.  Use eithe
2ac0: 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  r INTEGER or REA
2ad0: 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69  L whichever.** i
2ae0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20  s appropriate.  
2af0: 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20  But only do the 
2b00: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74  conversion if it
2b10: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74   is possible wit
2b20: 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20  hout.** loss of 
2b30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
2b40: 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73  return the revis
2b50: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  ed type of the a
2b60: 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  rgument..**.** T
2b70: 68 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49  his is an EXPERI
2b80: 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69  MENTAL api and i
2b90: 73 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61  s subject to cha
2ba0: 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a  nge or removal..
2bb0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  */.int sqlite3_v
2bc0: 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70  alue_numeric_typ
2bd0: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  e(sqlite3_value 
2be0: 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70  *pVal){.  Mem *p
2bf0: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
2c00: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
2c10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c30: 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d 29 3b  StoreType(pMem);
2c40: 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e  .  return pMem->
2c50: 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  type;.}../*.** E
2c60: 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20  xported version 
2c70: 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  of applyAffinity
2c80: 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72  (). This one wor
2c90: 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61  ks on sqlite3_va
2ca0: 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68  lue*, .** not th
2cb0: 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20  e internal Mem* 
2cc0: 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  type..*/.void sq
2cd0: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2ce0: 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74  ffinity(.  sqlit
2cf0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
2d00: 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20  .  u8 affinity, 
2d10: 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61  .  u8 enc.){.  a
2d20: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2d30: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2d40: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
2d50: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2d60: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
2d70: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
2d80: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2d90: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
2da0: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2db0: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2dc0: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2dd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2de0: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2df0: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2e00: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2e10: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2e20: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2e30: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2e40: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
2e50: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
2e60: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
2e70: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
2e80: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
2e90: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2ea0: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2eb0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2ec0: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2ed0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2ee0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2ef0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2f00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2f10: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2f20: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2f30: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f40: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2f50: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2f60: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2f70: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
2f80: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
2f90: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fa0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
2fb0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2fc0: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
2fd0: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
2fe0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
2ff0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
3000: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
3010: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3020: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
3030: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3040: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
3050: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
3060: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3070: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
3080: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3090: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
30a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
30b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
30c0: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
30d0: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
30e0: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
30f0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3100: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3110: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3120: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3130: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
3140: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
3150: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
3160: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
3170: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
3180: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
3190: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
31c0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
31d0: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
31e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31f0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
3200: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
3210: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3220: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3230: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3240: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3250: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3260: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3270: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3280: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3290: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
32a0: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
32b0: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
32c0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
32d0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
32e0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
32f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3300: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3310: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3320: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3330: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3340: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3350: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3360: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3370: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3380: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3390: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
33a0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
33b0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
33c0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33d0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
33e0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
33f0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3400: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3410: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3420: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3430: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3440: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3450: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3460: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3470: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3480: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3490: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
34a0: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
34b0: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
34c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
34d0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
34e0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34f0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3500: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3520: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3530: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3540: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3550: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3560: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3570: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3580: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3590: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
35a0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
35b0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
35c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35d0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
35e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
35f0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3600: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3610: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3620: 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20  TracePrint(FILE 
3630: 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  *out, Mem *p){. 
3640: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3650: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3660: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3670: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3680: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3690: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
36a0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
36b0: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
36c0: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
36d0: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
36e0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36f0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3700: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3710: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
3720: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3730: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3740: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3750: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3760: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3770: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3780: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3790: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
37a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
37b0: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
37c0: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
37d0: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
37e0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
37f0: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3800: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3810: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
3820: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
3830: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
3840: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
3850: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
3860: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3870: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3880: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3890: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
38a0: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
38b0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
38c0: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
38d0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
38e0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
38f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3900: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3910: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
3920: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
3930: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
3940: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
3950: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3960: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3970: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3980: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3990: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
39a0: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
39b0: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
39c0: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
39d0: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
39e0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
39f0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3a00: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
3a10: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
3a20: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
3a30: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
3a40: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
3a50: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
3a60: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a70: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a80: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a90: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3aa0: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3ab0: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3ac0: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3ad0: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3ae0: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3af0: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3b00: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3b10: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3b20: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3b30: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3b40: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3b50: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3b60: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b70: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b80: 61 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  at we needed.  B
3b90: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3ba0: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3bb0: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3bc0: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3bd0: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3be0: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3bf0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3c00: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3c10: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3c20: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3c30: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3c40: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3c50: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3c60: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c70: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c80: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c90: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3ca0: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3cb0: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3cc0: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3cd0: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3ce0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3cf0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3d00: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3d10: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3d20: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3d30: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3d40: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3d50: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3d60: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d70: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d80: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d90: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3da0: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3db0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3dc0: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3dd0: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3de0: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3df0: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3e00: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3e10: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3e20: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3e30: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3e40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3e50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ndif../*.** Exec
3e60: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3e70: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3e80: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3e90: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3ea0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3eb0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ec0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
3ed0: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
3ee0: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
3ef0: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
3f00: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
3f10: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
3f20: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
3f30: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
3f40: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
3f50: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
3f60: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
3f70: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
3f80: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
3f90: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
3fa0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
3fb0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
3fc0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
3fd0: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
3fe0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
3ff0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4000: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4010: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4020: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4030: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4040: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4050: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4060: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
4070: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
4080: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
4090: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
40a0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
40b0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
40c0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
40d0: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
40e0: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
40f0: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4100: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4110: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4120: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4130: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4140: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4150: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4160: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
4170: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
4180: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
4190: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
41a0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
41b0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
41c0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
41d0: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
41e0: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
41f0: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4200: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4210: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4220: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4230: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4240: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4250: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4260: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
4270: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
4280: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
4290: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
42a0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
42b0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
42c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
42d0: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
42e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
42f0: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4300: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4310: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4320: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4330: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4340: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4350: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4360: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4390: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
43c0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
43d0: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
43e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
43f0: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4400: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4420: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4430: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4440: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4450: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4460: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
4470: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
4480: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4490: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
44a0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
44b0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
44c0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
44d0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
44e0: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
44f0: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4500: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4510: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
4520: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4530: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
4540: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
4550: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
4560: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
4570: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
4580: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
4590: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
45a0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
45b0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
45c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
45d0: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
45e0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
45f0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4600: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4610: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4620: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4630: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4640: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4650: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4660: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
4670: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
4680: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
4690: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
46a0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
46b0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
46c0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
46d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
46e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
46f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4700: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4710: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4720: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4730: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4740: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4750: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4760: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66  P_Compare */.#if
4770: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4780: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
47a0: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
47b0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
47c0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
47d0: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
47e0: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
47f0: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
4800: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4810: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4820: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4830: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4840: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4850: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4860: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4870: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4880: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4890: 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28  MutexArrayEnter(
48a0: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
48b0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
48c0: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
48d0: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
48e0: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
48f0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
4900: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
4910: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
4920: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
4930: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
4940: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
4950: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4960: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4970: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4980: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4990: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
49a0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
49b0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
49c0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
49d0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
49e0: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
49f0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4a00: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4a10: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4a20: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4a30: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4a40: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4a50: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4a60: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4a70: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4a80: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4a90: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4aa0: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4ab0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4ac0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4ad0: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4ae0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4af0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4b00: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4b10: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4b20: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4b30: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4b40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4b50: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4b60: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4b70: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4b80: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4b90: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4ba0: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4bb0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4bc0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4bd0: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4be0: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4bf0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4c00: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4c10: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4c20: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4c30: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4c40: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4c50: 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26  ndif.    pOp = &
4c60: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4c70: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4c80: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4c90: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4ca0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4cb0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4cc0: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4cd0: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4ce0: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4cf0: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4d00: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4d10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4d20: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4d30: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4d40: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4d50: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4d60: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
4d70: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
4d80: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
4d90: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
4da0: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
4db0: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
4dc0: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
4dd0: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
4de0: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
4df0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4e00: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
4e10: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4e20: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
4e30: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4e40: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
4e50: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4e60: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
4e70: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4e80: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
4e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4ea0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
4eb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4ec0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4ed0: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
4ee0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
4ef0: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
4f00: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
4f10: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20  ired number.    
4f20: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
4f30: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
4f40: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
4f50: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
4f60: 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  of.    ** sqlite
4f70: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
4f80: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
4f90: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4fa0: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
4fb0: 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20  ..    ** If the 
4fc0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4fd0: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
4fe0: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
4ff0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
5000: 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72  h.    ** a retur
5010: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
5020: 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ORT..    */.    
5030: 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73  if( checkProgres
5040: 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  s ){.      if( d
5050: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d  b->nProgressOps=
5060: 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b  =nProgressOps ){
5070: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63  .        int prc
5080: 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20  ;.        prc = 
5090: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
50a0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
50b0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
50c0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
50d0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
50e0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
50f0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5100: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5110: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5120: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
5130: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
5140: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
5150: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
5160: 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74  n any opcode wit
5170: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
5180: 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  elase" tag, free
5190: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
51a0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
51b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
51c0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
51d0: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
51e0: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
51f0: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5200: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5210: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5220: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5230: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5240: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5250: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5260: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
5270: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
5280: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5290: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
52a0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
52b0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
52c0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
52d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
52e0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
52f0: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5300: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5310: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5320: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
5330: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
5340: 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20  ernal(pOut);.   
5350: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
5360: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
5370: 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63  .    /* Sanity c
5380: 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72  hecking on other
5390: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66   operands */.#if
53a0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
53b0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
53c0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
53d0: 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N1)!=0 ){.      
53e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
53f0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5400: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
5410: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 52 45 47  Mem );.      REG
5420: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5430: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
5440: 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p1]);.    }.    
5450: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5460: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  s & OPFLG_IN2)!=
5470: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5480: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5490: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
54a0: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
54b0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
54c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
54d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
54e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
54f0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5500: 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a  PFLG_IN3)!=0 ){.
5510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5520: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5540: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5550: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5560: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
5570: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5580: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5590: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
55a0: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
55b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
55c0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
55d0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
55e0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 7d 0a 20  >nMem );.    }. 
55f0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5600: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5610: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5620: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5630: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5640: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
5650: 65 6d 20 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  em );.    }.#end
5660: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5670: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5680: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56d0: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
56e0: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
56f0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5700: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5710: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5720: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5730: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5740: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5750: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5760: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5770: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5780: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5790: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
57a0: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
57b0: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
57c0: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
57d0: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
57e0: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
57f0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5800: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5810: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5820: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5830: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5840: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5850: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5860: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5870: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5880: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5890: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
58a0: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
58b0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
58c0: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
58d0: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
58e0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
58f0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5900: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5910: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5920: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5930: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5940: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5950: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5960: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5970: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5980: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5990: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
59a0: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
59b0: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
59c0: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
59d0: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
59e0: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
59f0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5a00: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5a10: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5a20: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5a30: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5a40: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5a50: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5a60: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5a70: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5a80: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5a90: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5aa0: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5ab0: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5ac0: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5ad0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5ae0: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5af0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5b00: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5b10: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5b20: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5b30: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5b40: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5b50: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5b60: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5b70: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5b80: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5b90: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5ba0: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5bb0: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5bc0: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
5bd0: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
5be0: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
5bf0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
5c00: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5c10: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
5c20: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
5c30: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
5c40: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5c50: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5c60: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5c70: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5c80: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5c90: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5ca0: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5cb0: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5cc0: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5cd0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5ce0: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
5cf0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
5d00: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
5d10: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
5d20: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
5d30: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
5d40: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5d50: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5d60: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5d70: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5d80: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5d90: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
5da0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5db0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
5df0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
5e00: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
5e10: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
5e20: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
5e30: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
5e40: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
5e50: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
5e60: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
5e70: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
5e80: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
5e90: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
5ea0: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
5eb0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
5ec0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
5ed0: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
5ee0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
5ef0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
5f00: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
5f10: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
5f20: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
5f30: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
5f40: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
5f50: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
5f60: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
5f70: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
5f80: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
5f90: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
5fa0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
5fb0: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
5fc0: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
5fd0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
5fe0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
5ff0: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6000: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6010: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6020: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6030: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6040: 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72  * Opcode:  Retur
6050: 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  n P1 * * * *.**.
6060: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e  ** Jump to the n
6070: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
6080: 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73  after the addres
6090: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
60a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
60b0: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
60c0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
60d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
60e0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
60f0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
6100: 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69  Int );.  pc = (i
6110: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
6120: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6130: 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a  ode:  Yield P1 *
6140: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6150: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6160: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6170: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6180: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
6190: 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20  Yield: {        
61a0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
61b0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
61c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
61d0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
61e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
61f0: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
6200: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6210: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
6220: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6230: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6240: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6250: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6260: 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73  1);.  pc = pcDes
6270: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
6280: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
6290: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
62a0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P4 *.**.** Check
62b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
62c0: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
62d0: 73 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  s is NULL then H
62e0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
62f0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
6300: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
6310: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
6320: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
6330: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
6340: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
6350: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
6360: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
6370: 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
6380: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
6390: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
63a0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
63b0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
63c0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
63d0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
63e0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
63f0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
6400: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
6410: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
6420: 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69  4 *.**.** Exit i
6430: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
6440: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
6450: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
6460: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
6470: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
6480: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
6490: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
64a0: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
64b0: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
64c0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
64d0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
64e0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
64f0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
6500: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
6510: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
6520: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
6530: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
6540: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
6550: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
6560: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
6570: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
6580: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
6590: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
65a0: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
65b0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
65c0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
65d0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
65e0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
65f0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
6600: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
6610: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
6620: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
6630: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
6640: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
6650: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
6660: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
6670: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
6680: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
6690: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
66a0: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
66b0: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
66c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
66d0: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
66e0: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
66f0: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
6700: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
6710: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
6720: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
6730: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
6740: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
6750: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6760: 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
6770: 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  1==SQLITE_OK && 
6780: 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
6790: 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62   /* Halt the sub
67a0: 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e  -program. Return
67b0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
67c0: 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f  parent frame. */
67d0: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
67e0: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
67f0: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
6800: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
6810: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
6820: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
6830: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
6840: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
6850: 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65  .    pc = sqlite
6860: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
6870: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69  e(pFrame);.    i
6880: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49  f( pOp->p2==OE_I
6890: 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f  gnore ){.      /
68a0: 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63  * Instruction pc
68b0: 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72   is the OP_Progr
68c0: 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  am that invoked 
68d0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
68e0: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
68f0: 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64  tly being halted
6900: 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74  . If the p2 inst
6910: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ruction of this 
6920: 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a  OP_Halt.      **
6930: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
6940: 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65  set to OE_Ignore
6950: 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70  , then the sub-p
6960: 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69  rogram is throwi
6970: 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49  ng.      ** an I
6980: 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e  GNORE exception.
6990: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75   In this case ju
69a0: 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73  mp to the addres
69b0: 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20  s specified.    
69c0: 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f    ** as the p2 o
69d0: 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50  f the calling OP
69e0: 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20  _Program.  */.  
69f0: 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b      pc = p->aOp[
6a00: 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  pc].p2-1;.    }.
6a10: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
6a20: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
6a30: 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  aMem;.    break;
6a40: 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20  .  }..  p->rc = 
6a50: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
6a60: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
6a70: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
6a80: 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70   = pc;.  if( pOp
6a90: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73  ->p4.z ){.    as
6aa0: 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53 51 4c  sert( p->rc!=SQL
6ab0: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73 71  ITE_OK );.    sq
6ac0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
6ad0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
6ae0: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
6af0: 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
6b00: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
6b10: 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
6b20: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
6b30: 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61  Op->p1, "abort a
6b40: 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73  t %d in [%s]: %s
6b50: 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20  ", pc, p->zSql, 
6b60: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65  pOp->p4.z);.  }e
6b70: 6c 73 65 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  lse if( p->rc ){
6b80: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
6b90: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
6ba0: 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
6bb0: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
6bc0: 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61 69  p->p1, "constrai
6bd0: 6e 74 20 66 61 69 6c 65 64 20 61 74 20 25 64 20  nt failed at %d 
6be0: 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70 2d  in [%s]", pc, p-
6bf0: 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72 63  >zSql);.  }.  rc
6c00: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
6c10: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
6c20: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
6c30: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
6c40: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
6c50: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
6c60: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
6c70: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63  {.    p->rc = rc
6c80: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
6c90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
6ca0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6cb0: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
6cc0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
6cd0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
6ce0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
6cf0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
6d00: 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  >0 );.    rc = p
6d10: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
6d20: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
6d30: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
6d40: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
6d50: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
6d60: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6d70: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
6d80: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
6d90: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
6da0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
6db0: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
6dc0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
6dd0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
6de0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6df0: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
6e00: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6e10: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
6e20: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6e30: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6e40: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
6e50: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
6e60: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
6e70: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
6e80: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
6e90: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
6ea0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
6eb0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
6ec0: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
6ed0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
6ee0: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
6ef0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6f00: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
6f10: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
6f20: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
6f30: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6f40: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6f50: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
6f60: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
6f70: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
6f80: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6f90: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
6fb0: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
6fc0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6fd0: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
6fe0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
6ff0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
7000: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
7010: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
7020: 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  >r = *pOp->p4.pR
7030: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
7040: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
7050: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
7060: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
7070: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
7080: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
7090: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
70a0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
70b0: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
70c0: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
70d0: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
70e0: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
70f0: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
7100: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
7110: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7120: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
7130: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7140: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7150: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
7160: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
7170: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
7180: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
7190: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
71a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
71b0: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
71c0: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
71d0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
71e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
71f0: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7200: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
7210: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7220: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
7230: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f  LITE_TOOBIG ) go
7240: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
7250: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
7260: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
7270: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
7280: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
7290: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
72a0: 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  rt( pOut->zMallo
72b0: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
72c0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
72d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20  flags & MEM_Dyn 
72e0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  );.    pOut->zMa
72f0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
7300: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
7310: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
7320: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
7330: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
7340: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
7350: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
7360: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
7370: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
7380: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
7390: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
73a0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
73b0: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
73c0: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
73d0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
73e0: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
73f0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
7400: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
7410: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7420: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
7430: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
7440: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
7450: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
7460: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
7470: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
7480: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
7490: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
74a0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
74b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
74c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
74d0: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
74e0: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
74f0: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7500: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7510: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7520: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
7530: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
7540: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
7550: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
7560: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
7570: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
7580: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7590: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
75a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
75b0: 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20  de: Null * P2 * 
75c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
75d0: 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  a NULL into regi
75e0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
75f0: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
7600: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7610: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7620: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7630: 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Null;.  break;.}
7640: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  .../* Opcode: Bl
7650: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a  ob P1 P2 * P4.**
7660: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
7670: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
7680: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
7690: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
76a0: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
76b0: 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  2. This instruct
76c0: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64  ion is not coded
76d0: 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20   directly.** by 
76e0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e  the compiler. In
76f0: 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69  stead, the compi
7700: 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63 69 66  ler layer specif
7710: 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78  ies.** an OP_Hex
7720: 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74  Blob opcode, wit
7730: 68 20 74 68 65 20 68 65 78 20 73 74 72 69 6e 67  h the hex string
7740: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
7750: 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61  of.** the blob a
7760: 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64  s P4. This opcod
7770: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
7780: 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a   to an OP_Blob.*
7790: 2a 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  * the first time
77a0: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 2e   it is executed.
77b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
77c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
77d0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
77e0: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
77f0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
7800: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
7810: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
7820: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
7830: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
7840: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
7850: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
7860: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
7870: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
7880: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7890: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
78a0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
78b0: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
78c0: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
78d0: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
78e0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
78f0: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
7900: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
7910: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
7920: 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50  ears in P4 and P
7930: 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20  3==1..** The P4 
7940: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
7950: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
7960: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
7970: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7980: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
7990: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
79a0: 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ease */.  Mem *p
79b0: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
79c0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
79d0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
79e0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
79f0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
7a00: 72 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  r );.  pVar = &p
7a10: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
7a20: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
7a30: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
7a40: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
7a50: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7a60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7a70: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7a80: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7a90: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7aa0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7ab0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7ac0: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7ad0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7ae0: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7af0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7b00: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
7b10: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
7b20: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
7b30: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
7b40: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
7b50: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
7b60: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7b70: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7b80: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7b90: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7ba0: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7bb0: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7bc0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7bd0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
7be0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
7bf0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
7c00: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
7c10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7c20: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
7c30: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
7c40: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
7c50: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7c60: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
7c70: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
7c80: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
7c90: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
7ca0: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
7cb0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
7cc0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7cd0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
7ce0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
7cf0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
7d00: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
7d10: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
7d20: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
7d30: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
7d40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
7d50: 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  ut<=&aMem[p->nMe
7d60: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
7d70: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pIn1<=&aMem[p-
7d80: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d  >nMem] );.    zM
7d90: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
7da0: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
7db0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7dc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7dd0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
7de0: 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  ;.    pIn1->zMal
7df0: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
7e00: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
7e10: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
7e20: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
7e30: 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  Out++;.  }.  bre
7e40: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7e50: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a  : Copy P1 P2 * *
7e60: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
7e70: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
7e80: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
7e90: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
7ea0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
7eb0: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
7ec0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
7ed0: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
7ee0: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
7ef0: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
7f00: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
7f10: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
7f20: 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20   OP_Copy: {     
7f30: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
7f40: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
7f50: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
7f60: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
7f70: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
7f80: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
7f90: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
7fa0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7fb0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
7fc0: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
7fd0: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
7fe0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7ff0: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8000: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8010: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
8020: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
8030: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8040: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8050: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8060: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
8070: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8080: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8090: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
80a0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
80b0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
80c0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
80d0: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
80e0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
80f0: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8100: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8110: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8120: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8130: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8140: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8150: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
8160: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
8170: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8180: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8190: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
81a0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
81b0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
81c0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
81d0: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
81e0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
81f0: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
8200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
8210: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8220: 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  * in1, out2 */. 
8230: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8240: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
8250: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
8260: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
8270: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
8280: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8290: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
82a0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52   MEM_Ephem);.  R
82b0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
82c0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
82d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
82e0: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
82f0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
8300: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
8310: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
8320: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
8330: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
8340: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
8350: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
8360: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
8370: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
8380: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8390: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
83a0: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
83b0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
83c0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
83d0: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
83e0: 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c  o the top P1 val
83f0: 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c  ues as the resul
8400: 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  t.** row..*/.cas
8410: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
8420: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
8430: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
8440: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
8450: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
8460: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8470: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8480: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ->p1+pOp->p2<=p-
8490: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a  >nMem+1 );..  /*
84a0: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
84b0: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
84c0: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
84d0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
84e0: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
84f0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8500: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
8510: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
8520: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
8530: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
8540: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
8550: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
8560: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
8570: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
8580: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
8590: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
85a0: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
85b0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
85c0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
85d0: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
85e0: 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  al );.    break;
85f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
8600: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
8610: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
8620: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
8630: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
8640: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
8650: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
8660: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
8670: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
8680: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
8690: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
86a0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
86b0: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
86c0: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
86d0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
86e0: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
86f0: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
8700: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
8710: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
8720: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
8730: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8740: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
8750: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
8760: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
8770: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
8780: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
8790: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
87a0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
87b0: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
87c0: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
87d0: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
87e0: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
87f0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
8800: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
8810: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
8820: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
8830: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
8840: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
8850: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8860: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
8870: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
8880: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
8890: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
88a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
88b0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
88c0: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
88d0: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
88e0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
88f0: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
8900: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
8910: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
8920: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
8930: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
8940: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
8950: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
8960: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
8970: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
8980: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
8990: 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
89a0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c!=SQLITE_OK) ){
89b0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
89c0: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
89d0: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
89e0: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
89f0: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
8a00: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
8a10: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
8a20: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
8a30: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
8a40: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
8a50: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
8a60: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
8a70: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
8a80: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
8a90: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
8aa0: 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66  .  ** as side ef
8ab0: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
8ac0: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
8ad0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
8ae0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
8af0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
8b00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8b10: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
8b20: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
8b30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
8b40: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
8b50: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8b60: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
8b70: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
8b80: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
8b90: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
8ba0: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
8bb0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
8bc0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
8bd0: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8be0: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8bf0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8c00: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8c10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8c20: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8c30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8c40: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8c50: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8c60: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
8c70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
8c80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
8c90: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
8ca0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
8cb0: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
8cc0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
8cd0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8ce0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8cf0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8d00: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8d10: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8d20: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8d30: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8d40: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8d50: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8d60: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
8d70: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
8d80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
8d90: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
8da0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
8db0: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
8dc0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
8dd0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
8de0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8df0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
8e00: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
8e10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
8e20: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
8e30: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
8e40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
8e50: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
8e60: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
8e70: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
8e80: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
8e90: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
8ea0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
8eb0: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
8ec0: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
8ed0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
8ee0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
8ef0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
8f00: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
8f10: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
8f20: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
8f30: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
8f40: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
8f50: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
8f60: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8f70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
8f80: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
8f90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
8fa0: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
8fb0: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
8fc0: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
8fd0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
8fe0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
8ff0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
9000: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
9010: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
9020: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
9030: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
9040: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
9050: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
9060: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
9070: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
9080: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
9090: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
90a0: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
90b0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
90c0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
90d0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
90e0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
90f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
9100: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9110: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
9120: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9130: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
9140: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9150: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9160: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9170: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9180: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9190: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
91a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
91b0: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
91c0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
91d0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
91e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
91f0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9200: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9210: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9220: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9230: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
9240: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
9250: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
9260: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
9270: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
9280: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9290: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
92a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
92b0: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
92c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
92d0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
92e0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
92f0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9300: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9310: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9320: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9330: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
9340: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9350: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
9360: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9370: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9380: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9390: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
93a0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
93b0: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
93c0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
93d0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
93e0: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
93f0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9400: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
9410: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
9420: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9430: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9440: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
9450: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
9460: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
9470: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9480: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9490: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
94a0: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
94b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
94c0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
94d0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
94e0: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
94f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9500: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
9510: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
9520: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
9530: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
9540: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9550: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9580: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9590: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
95a0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
95b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
95c0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
95d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
95e0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9600: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
9610: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9620: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
9630: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
9640: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9650: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
9660: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9670: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9680: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9690: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
96a0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
96b0: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  nt flags;      /
96c0: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
96d0: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
96e0: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34   inputs */.  i64
96f0: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
9700: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9710: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
9720: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
9730: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
9740: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
9750: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
9760: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
9770: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
9780: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9790: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
97a0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
97b0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
97c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
97d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
97e0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
97f0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
9800: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9810: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9820: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9830: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9840: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
9850: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9860: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9870: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9880: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9890: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
98a0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
98b0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
98c0: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
98d0: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
98e0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
98f0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9900: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9910: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9920: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9930: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9940: 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20  iB += iA;       
9950: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9960: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
9970: 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20    iB -= iA;     
9980: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9990: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
99a0: 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20      iB *= iA;   
99b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
99c0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
99d0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
99e0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
99f0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9a00: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9a10: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
9a20: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
9a30: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
9a40: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
9a50: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
9a60: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
9a70: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9a80: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9a90: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9aa0: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9ab0: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9ac0: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9ad0: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9ae0: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9af0: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9b00: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9b10: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
9b20: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
9b30: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
9b40: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
9b50: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
9b60: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
9b70: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
9b80: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
9b90: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
9ba0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9bb0: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
9bc0: 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20  ST_INT64 ) iA = 
9bd0: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  1;.        iB /=
9be0: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
9bf0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9c00: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9c10: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
9c20: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9c30: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9c40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9c50: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
9c60: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
9c70: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9c80: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9c90: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
9ca0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9cb0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
9cc0: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
9cd0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
9ce0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
9cf0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
9d00: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9d10: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
9d20: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9d30: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9d40: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
9d50: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
9d60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9d70: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
9d80: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
9d90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9da0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
9db0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
9dc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9dd0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9de0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
9df0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
9e00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
9e10: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
9e20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
9e30: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
9e40: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9e50: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9e60: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
9e70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
9e90: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
9ea0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
9eb0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
9ec0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
9ed0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9ee0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9ef0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
9f00: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
9f10: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
9f20: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
9f30: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
9f40: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9f50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
9f60: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
9f70: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
9f80: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
9f90: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9fa0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
9fb0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
9fc0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
9fd0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
9fe0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9ff0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
a000: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
a010: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a020: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
a030: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
a040: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
a050: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a060: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a070: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
a080: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
a090: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
a0a0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
a0b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a0c0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
a0d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a0e0: 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50  e: CollSeq * * P
a0f0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
a100: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
a110: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
a120: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
a130: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a140: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
a150: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
a160: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
a170: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
a180: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
a190: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
a1a0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
a1b0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
a1c0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
a1d0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
a1e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ..**.** The inte
a1f0: 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68  rface used by th
a200: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a210: 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e   of the aforemen
a220: 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  tioned functions
a230: 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20  .** to retrieve 
a240: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
a250: 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
a260: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74  is opcode is not
a270: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75   available.** pu
a280: 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20  blicly, only to 
a290: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64  user functions d
a2a0: 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63  efined in func.c
a2b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
a2c0: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
a2d0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a2e0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62  4_COLLSEQ );.  b
a2f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a300: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
a310: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
a320: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
a330: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
a340: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
a350: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
a360: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
a370: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
a380: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
a390: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
a3a0: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
a3b0: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
a3c0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
a3d0: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
a3e0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
a3f0: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
a400: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
a410: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a420: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
a430: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
a440: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
a450: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
a460: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
a470: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
a480: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
a490: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
a4a0: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
a4b0: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
a4c0: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
a4d0: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
a4e0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
a4f0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
a500: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
a510: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
a520: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a530: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
a540: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
a550: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
a560: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
a570: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
a580: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
a590: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
a5a0: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
a5b0: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
a5c0: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
a5d0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
a5e0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
a5f0: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
a600: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
a610: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
a620: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
a630: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
a640: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
a650: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
a660: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
a670: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20  l || n==0 );..  
a680: 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
a690: 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
a6a0: 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  p->p2+n<=p->nMem
a6b0: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
a6c0: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
a6d0: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
a6e0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
a6f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a700: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
a710: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
a720: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
a730: 70 41 72 67 3b 0a 20 20 20 20 73 71 6c 69 74 65  pArg;.    sqlite
a740: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
a750: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
a760: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a770: 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20  >p2+i, pArg);.  
a780: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
a790: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
a7a0: 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  CDEF || pOp->p4t
a7b0: 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43  ype==P4_VDBEFUNC
a7c0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
a7d0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
a7e0: 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75  F ){.    ctx.pFu
a7f0: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
a800: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  nc;.    ctx.pVdb
a810: 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c  eFunc = 0;.  }el
a820: 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  se{.    ctx.pVdb
a830: 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e  eFunc = (VdbeFun
a840: 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65  c*)pOp->p4.pVdbe
a850: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46  Func;.    ctx.pF
a860: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
a870: 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a  unc->pFunc;.  }.
a880: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a890: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
a8a0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
a8b0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a8c0: 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  p3];.  ctx.s.fla
a8d0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
a8e0: 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a   ctx.s.db = db;.
a8f0: 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
a900: 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
a910: 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65  c = 0;..  /* The
a920: 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
a930: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
a940: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
a950: 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
a960: 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73  pointer to ctx.s
a970: 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
a980: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61  user-function ca
a990: 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61  n use.  ** the a
a9a0: 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
a9b0: 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
a9c0: 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
a9d0: 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
a9e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
a9f0: 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29  ve(&ctx.s, pOut)
aa00: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
aa10: 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e  ag(&ctx.s, MEM_N
aa20: 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45  ull);..  ctx.isE
aa30: 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20  rror = 0;.  if( 
aa40: 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
aa50: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
aa60: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
aa70: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
aa80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
aa90: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
aaa0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
aab0: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
aac0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
aad0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
aae0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
aaf0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a  .pColl;.  }.  (*
ab00: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
ab10: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
ab20: 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
ab30: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
ab40: 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20   /* Even though 
ab50: 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66  a malloc() has f
ab60: 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65  ailed, the imple
ab70: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
ab80: 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e  .    ** user fun
ab90: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
aba0: 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33  alled an sqlite3
abb0: 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75  _result_XXX() fu
abc0: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f  nction.    ** to
abd0: 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e   return a value.
abe0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
abf0: 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79  all releases any
ac00: 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a   resources.    *
ac10: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
ac20: 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a  h such a value..
ac30: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
ac40: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
ac50: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
ac60: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
ac70: 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69    /* If any auxi
ac80: 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74  liary data funct
ac90: 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63  ions have been c
aca0: 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73  alled by this us
acb0: 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a  er function,.  *
acc0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61  * immediately ca
acd0: 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  ll the destructo
ace0: 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74  r for any non-st
acf0: 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a  atic values..  *
ad00: 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62  /.  if( ctx.pVdb
ad10: 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c  eFunc ){.    sql
ad20: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
ad30: 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46  xData(ctx.pVdbeF
ad40: 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  unc, pOp->p1);. 
ad50: 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65     pOp->p4.pVdbe
ad60: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
ad70: 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  Func;.    pOp->p
ad80: 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46  4type = P4_VDBEF
ad90: 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  UNC;.  }..  /* I
ada0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
adb0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
adc0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
add0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
ade0: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
adf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
ae00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
ae10: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
ae20: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
ae30: 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
ae40: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
ae50: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
ae60: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
ae70: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
ae80: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
ae90: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
aea0: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
aeb0: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
aec0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
aed0: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
aee0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
aef0: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
af00: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
af10: 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45  g;.  }.  REGISTE
af20: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
af30: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
af40: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
af50: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
af60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
af70: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
af80: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
af90: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
afa0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
afb0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
afc0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
afd0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
afe0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
aff0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b000: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b010: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b020: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
b030: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b040: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b050: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
b060: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b070: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b080: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b090: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b0a0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b0b0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b0c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b0d0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b0e0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
b0f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b100: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b110: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b120: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
b130: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b140: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b150: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b160: 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a  in regiser P1..*
b170: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b180: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b190: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b1a0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b1b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b1c0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b1d0: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
b1e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
b1f0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
b200: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b210: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
b220: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
b230: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
b240: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
b250: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
b260: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
b270: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b280: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b290: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b2a0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b2b0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b2c0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b2e0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
b2f0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b300: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
b310: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
b320: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b330: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
b340: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b350: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
b360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b370: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
b380: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b390: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b3a0: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
b3b0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b3c0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
b3d0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
b3e0: 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20   a;.  i64 b;..  
b3f0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b400: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b410: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b420: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b430: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
b440: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b450: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b460: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b470: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b480: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b490: 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73  eak;.  }.  a = s
b4a0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b4b0: 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20  ue(pIn2);.  b = 
b4c0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
b4d0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69  lue(pIn1);.  swi
b4e0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
b4f0: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
b500: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26  BitAnd:      a &
b510: 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  = b;     break;.
b520: 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f      case OP_BitO
b530: 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b  r:       a |= b;
b540: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b550: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
b560: 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20  t:   a <<= b;   
b570: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
b580: 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f  ult:  assert( pO
b590: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68  p->opcode==OP_Sh
b5a0: 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20  iftRight );.    
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20       a >>= b;   
b5d0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f   break;.  }.  pO
b5e0: 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d  ut->u.i = a;.  M
b5f0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b600: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
b610: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b620: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
b630: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
b640: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
b650: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
b660: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
b670: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
b680: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
b690: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
b6a0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
b6b0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
b6c0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
b6d0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
b6e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
b6f0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
b700: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b710: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
b720: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
b730: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
b740: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
b750: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b760: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
b770: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
b780: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
b790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
b7a0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
b7b0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
b7c0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
b7d0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
b7e0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
b7f0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
b800: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
b810: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
b820: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
b830: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
b840: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
b850: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
b860: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
b870: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
b880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
b890: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
b8a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b8b0: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
b8c0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
b8d0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
b8e0: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
b8f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b900: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
b910: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
b920: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
b930: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
b940: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
b950: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b960: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
b970: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
b980: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
b990: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b9a0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
b9b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
b9c0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
b9d0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
b9e0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
b9f0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
ba00: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
ba10: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
ba20: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
ba30: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
ba40: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
ba50: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
ba60: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
ba70: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
ba80: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
ba90: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
baa0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
bab0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
bac0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
bad0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
bae0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
baf0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
bb00: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
bb10: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
bb20: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
bb30: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
bb40: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
bb50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bb60: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bb70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bb80: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
bb90: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
bba0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
bbb0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
bbc0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
bbd0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
bbe0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bbf0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
bc00: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
bc10: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
bc20: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bc30: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
bc40: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
bc50: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bc60: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bc70: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
bc80: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
bc90: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
bca0: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
bcb0: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
bcc0: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
bcd0: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
bce0: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
bcf0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
bd00: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
bd10: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
bd20: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
bd30: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
bd40: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
bd50: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bd60: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
bd70: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
bd80: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
bd90: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
bda0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
bdb0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
bdc0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
bdd0: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
bde0: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
bdf0: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
be00: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
be10: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
be20: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
be30: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
be40: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
be50: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
be60: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
be70: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
be80: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
be90: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
bea0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
beb0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
bec0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
bed0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
bee0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bef0: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
bf00: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
bf10: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bf20: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
bf30: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
bf40: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bf50: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bf60: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
bf70: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
bf80: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
bf90: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
bfa0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
bfb0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
bfc0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
bfd0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
bfe0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
bff0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c000: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c010: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c040: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c050: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c060: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
c070: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c080: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
c090: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c0a0: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
c0b0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
c0c0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
c0d0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
c0e0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
c0f0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
c100: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
c110: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
c120: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c130: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
c140: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
c150: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
c160: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
c170: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
c180: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c190: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
c1a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c1b0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
c1c0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c1d0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c1e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c1f0: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
c200: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
c210: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
c220: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
c230: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
c240: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
c250: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
c260: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
c270: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c280: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
c290: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
c2a0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
c2b0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
c2c0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
c2d0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c2e0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c2f0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c300: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c310: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
c320: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c330: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c340: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
c350: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c360: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c370: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c380: 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   & (MEM_Null|MEM
c390: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
c3a0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c3b0: 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79  3VdbeMemNumerify
c3c0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
c3d0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
c3e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
c3f0: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
c400: 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20   ToInt P1 * * * 
c410: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c420: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c430: 74 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74  ter P1 be an int
c440: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
c450: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c460: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
c470: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
c480: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
c490: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c4a0: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c4b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c4c0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
c4d0: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c4e0: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c4f0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c500: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c510: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c520: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c530: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c540: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c550: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c560: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c570: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
c580: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c590: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
c5a0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c5b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c5c0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
c5d0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
c5e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c5f0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
c600: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
c610: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
c620: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
c630: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
c640: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
c650: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
c660: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
c670: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c680: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c690: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c6a0: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
c6b0: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
c6c0: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
c6d0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
c6e0: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
c6f0: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
c700: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
c710: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
c720: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
c730: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
c740: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c750: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
c760: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
c770: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
c780: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
c790: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
c7a0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
c7b0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
c7c0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
c7d0: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
c7e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c7f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c800: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
c810: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c820: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c830: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c840: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c850: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c860: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
c870: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c880: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
c890: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
c8a0: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
c8b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
c8c0: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a  ATING_POINT) */.
c8d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c8e0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c8f0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c900: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c910: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c920: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c930: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c940: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c950: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c960: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c970: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c980: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c990: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c9a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c9b0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c9c0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c9d0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c9e0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c9f0: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
ca00: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
ca10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
ca20: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
ca30: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
ca40: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
ca50: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
ca60: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
ca70: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ca80: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
ca90: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
caa0: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
cab0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
cac0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
cad0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
cae0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
caf0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
cb00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
cb10: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
cb20: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
cb30: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
cb40: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
cb50: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
cb60: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
cb70: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
cb80: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
cb90: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
cba0: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
cbb0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
cbc0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
cbd0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
cbe0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
cbf0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
cc00: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
cc10: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
cc20: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
cc30: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
cc40: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
cc50: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
cc60: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
cc70: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
cc80: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
cc90: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
cca0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
ccb0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
ccc0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
ccd0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
cce0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
ccf0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
cd00: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
cd10: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
cd20: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
cd30: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
cd40: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
cd50: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
cd60: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
cd70: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
cd80: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
cd90: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
cda0: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
cdb0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
cdc0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
cdd0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
cde0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
cdf0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
ce00: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
ce10: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ce20: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
ce30: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ce40: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
ce50: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
ce60: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ce70: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
ce80: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
ce90: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
cea0: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
ceb0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
cec0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
ced0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
cee0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
cef0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
cf00: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
cf10: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
cf20: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
cf30: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
cf40: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
cf50: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
cf60: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
cf70: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
cf80: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
cf90: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
cfa0: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
cfb0: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
cfc0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
cfd0: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
cfe0: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
cff0: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
d000: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
d010: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
d020: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
d030: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
d040: 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65   is false.  If e
d050: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d060: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
d070: 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a  esult is true..*
d080: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
d090: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d0a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d0b0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d0c0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d0d0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d0e0: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d0f0: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d100: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
d110: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d120: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d130: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d140: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d150: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d160: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
d170: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
d180: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
d190: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
d1a0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d1b0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d1c0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
d1d0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d1e0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
d1f0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
d200: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
d210: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
d220: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
d230: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
d240: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
d250: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
d260: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
d270: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
d280: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
d290: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
d2a0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
d2b0: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
d2c0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d2d0: 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65   NULL the the re
d2e0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
d2f0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
d300: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
d310: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
d320: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
d330: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
d340: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
d350: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d360: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d370: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d380: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d390: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d3a0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
d3b0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
d3c0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
d3d0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
d3e0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d3f0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d400: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d410: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d420: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d430: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
d440: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d450: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d460: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d470: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d480: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d490: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d4a0: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
d4b0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
d4c0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
d4d0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
d4e0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
d4f0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d500: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
d510: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
d520: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
d530: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
d540: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
d550: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
d560: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
d570: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
d580: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
d590: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
d5a0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
d5b0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d5c0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d5d0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d5e0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d5f0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
d600: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
d610: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d620: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
d630: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d640: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
d650: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d660: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
d670: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
d680: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
d690: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d6a0: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
d6b0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
d6c0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
d6d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
d6e0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
d6f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d710: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
d720: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d730: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d750: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
d760: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d770: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
d780: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
d790: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
d7a0: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
d7b0: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
d7c0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
d7d0: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
d7e0: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
d7f0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
d800: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
d810: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
d820: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
d830: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
d840: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
d850: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
d860: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
d870: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
d880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d890: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
d8a0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
d8b0: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
d8c0: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
d8d0: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
d8e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
d8f0: 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d  pIn3->flags)&MEM
d900: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
d910: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
d920: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
d930: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
d940: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
d950: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
d960: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d970: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
d980: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
d990: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
d9a0: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
d9b0: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
d9c0: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
d9d0: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
d9e0: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
d9f0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
da00: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
da10: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
da20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
da30: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
da40: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
da50: 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28  );.      res = (
da60: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
da70: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
da80: 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65  Null)==0;.    }e
da90: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
daa0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
dab0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
dac0: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
dad0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
dae0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
daf0: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
db00: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
db10: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
db20: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
db30: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
db40: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
db50: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
db60: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
db70: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
db80: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
db90: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
dba0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
dbb0: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
dbc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
dbd0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
dbe0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
dbf0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
dc00: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
dc10: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
dc20: 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  -1;.      }.    
dc30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
dc40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
dc50: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
dc60: 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f  s NULL.  Do a co
dc70: 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20  mparison. */.   
dc80: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
dc90: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
dca0: 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61  _MASK;.    if( a
dcb0: 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
dcc0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
dcd0: 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In1, affinity, e
dce0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
dcf0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
dd00: 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n3, affinity, en
dd10: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69  coding);.      i
dd20: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
dd30: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
dd40: 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  m;.    }..    as
dd50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
dd60: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
dd70: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
dd80: 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  0 );.    ExpandB
dd90: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45  lob(pIn1);.    E
dda0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
ddb0: 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
ddc0: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
ddd0: 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
dde0: 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73  .pColl);.  }.  s
ddf0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
de00: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
de10: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
de20: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
de30: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
de40: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
de50: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
de60: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
de70: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
de80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
de90: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
dea0: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
deb0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
dec0: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
ded0: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
dee0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
def0: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
df00: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
df10: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
df20: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
df30: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
df40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
df50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
df60: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
df70: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
df80: 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49   = res;.    REGI
df90: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
dfa0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
dfb0: 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  se if( res ){.  
dfc0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
dfd0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
dfe0: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
dff0: 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
e000: 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
e010: 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
e020: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
e030: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn1->flags&~ME
e040: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
e050: 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61  lags1&MEM_TypeMa
e060: 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  sk);.  pIn3->fla
e070: 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  gs = (pIn3->flag
e080: 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s&~MEM_TypeMask)
e090: 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54   | (flags3&MEM_T
e0a0: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61  ypeMask);.  brea
e0b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
e0c0: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
e0d0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
e0e0: 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
e0f0: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
e100: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
e110: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
e120: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
e130: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
e140: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
e150: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
e160: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65  l the next OP_Pe
e170: 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f  rmutation, OP_Co
e180: 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c  mpare,.** OP_Hal
e190: 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52  t, or OP_ResultR
e1a0: 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74  ow.  Typically t
e1b0: 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  he OP_Permutatio
e1c0: 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a  n should occur.*
e1d0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  * immediately pr
e1e0: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
e1f0: 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
e200: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
e210: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
e220: 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
e230: 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
e240: 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
e250: 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
e260: 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
e270: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
e280: 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
e290: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  P4 *.**.** Compa
e2a0: 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66  re to vectors of
e2b0: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
e2c0: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
e2d0: 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a  -1) (all this.**
e2e0: 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e   one "A") and in
e2f0: 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
e300: 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
e310: 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
e320: 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
e330: 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
e340: 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
e350: 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
e360: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
e370: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
e380: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
e390: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
e3a0: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
e3b0: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
e3c0: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
e3d0: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
e3e0: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
e3f0: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
e400: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
e410: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
e420: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
e430: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
e440: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
e450: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
e460: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
e470: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
e480: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
e490: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
e4a0: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
e4b0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
e4c0: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
e4d0: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
e4e0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
e4f0: 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
e500: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
e510: 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
e520: 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
e530: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
e540: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e550: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
e560: 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
e570: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
e580: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
e590: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
e5a0: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
e5b0: 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ;.  pKeyInfo = p
e5c0: 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
e5d0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
e5e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
e5f0: 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
e600: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
e610: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53  = pOp->p2;.#if S
e620: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
e630: 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
e640: 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
e650: 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
e660: 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
e670: 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
e680: 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
e690: 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
e6a0: 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65  && p1+mx<=p->nMe
e6b0: 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  m+1 );.    asser
e6c0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
e6d0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
e6e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
e6f0: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
e700: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
e710: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
e720: 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  && p2+n<=p->nMem
e730: 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
e740: 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
e750: 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
e760: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
e770: 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
e780: 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
e790: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e7a0: 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p1+idx, &aMem
e7b0: 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52  [p1+idx]);.    R
e7c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
e7d0: 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  +idx, &aMem[p2+i
e7e0: 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  dx]);.    assert
e7f0: 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  ( i<pKeyInfo->nF
e800: 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
e810: 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
e820: 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
e830: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
e840: 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
e850: 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
e860: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
e870: 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
e880: 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
e890: 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
e8a0: 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
e8b0: 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
e8c0: 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
e8d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e8e0: 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
e8f0: 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
e900: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
e910: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
e920: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
e930: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
e940: 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
e950: 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
e960: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
e970: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
e980: 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
e990: 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
e9a0: 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
e9b0: 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
e9c0: 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
e9d0: 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
e9e0: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
e9f0: 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
ea10: 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
ea20: 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70  mpare<0 ){.    p
ea30: 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  c = pOp->p1 - 1;
ea40: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
ea50: 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
ea60: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
ea70: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
ea80: 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  c = pOp->p3 - 1;
ea90: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
eaa0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
eab0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
eac0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
ead0: 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
eae0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
eaf0: 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
eb00: 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
eb10: 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
eb20: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
eb30: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
eb40: 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
eb50: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
eb60: 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
eb70: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
eb80: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
eb90: 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
eba0: 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
ebb0: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
ebc0: 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
ebd0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
ebe0: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
ebf0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
ec00: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec10: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
ec20: 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
ec30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ec40: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
ec50: 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
ec60: 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
ec70: 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
ec80: 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
ec90: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
eca0: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
ecb0: 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
ecc0: 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
ecd0: 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
ece0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ed00: 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
ed10: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ed20: 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ed40: 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
ed50: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ed60: 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
ed70: 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
ed80: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
ed90: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
eda0: 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
edb0: 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
edc0: 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
edd0: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
ede0: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
edf0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
ee00: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
ee10: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ee20: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
ee30: 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
ee40: 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
ee50: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
ee60: 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
ee70: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ee80: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
ee90: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
eea0: 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
eeb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
eec0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
eed0: 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
eee0: 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
eef0: 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
ef00: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
ef10: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
ef20: 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
ef30: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
ef40: 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
ef50: 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
ef60: 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
ef70: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
ef80: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
ef90: 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
efa0: 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
efb0: 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
efc0: 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
efd0: 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
efe0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
eff0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
f000: 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
f010: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f020: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
f030: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
f040: 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
f050: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f060: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
f070: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f080: 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
f090: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  * *.**.** Interp
f0a0: 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
f0b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
f0c0: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
f0d0: 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
f0e0: 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
f0f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
f100: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
f110: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
f120: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
f130: 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
f140: 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
f150: 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
f160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f170: 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
f180: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
f190: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
f1a0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
f1b0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
f1c0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f1d0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f1e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f1f0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
f200: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
f210: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
f220: 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56  (pOut, !sqlite3V
f230: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
f240: 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
f250: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
f260: 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
f270: 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  *.**.** Interpre
f280: 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
f290: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
f2a0: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
f2b0: 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
f2c0: 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
f2d0: 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
f2e0: 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
f2f0: 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
f300: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
f310: 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
f320: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f340: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
f350: 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
f360: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f370: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
f380: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f390: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
f3a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f3b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
f3c0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
f3d0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f3e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f3f0: 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71  tInt64(pOut, ~sq
f400: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
f410: 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
f420: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f430: 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
f440: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
f450: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
f460: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
f470: 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
f480: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63  value is.** is c
f490: 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
f4a0: 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
f4b0: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
f4c0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
f4d0: 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
f4e0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
f4f0: 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a  if P3 is true..*
f500: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
f510: 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
f520: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
f530: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
f540: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
f550: 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
f560: 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  e is.** is consi
f570: 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
f580: 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
f590: 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
f5a0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
f5b0: 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
f5c0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
f5d0: 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a  if P3 is true..*
f5e0: 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f600: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
f610: 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
f620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
f630: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
f640: 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  c;.  pIn1 = &aMe
f650: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
f660: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f670: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f680: 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
f690: 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
f6a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
f6b0: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
f6c0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f6d0: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65  lue(pIn1)!=0;.#e
f6e0: 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  lse.    c = sqli
f6f0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
f700: 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e  (pIn1)!=0.0;.#en
f710: 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  dif.    if( pOp-
f720: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f  >opcode==OP_IfNo
f730: 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a  t ) c = !c;.  }.
f740: 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70    if( c ){.    p
f750: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
f760: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
f770: 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
f780: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
f790: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f7a0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f7b0: 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
f7c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  L..*/.case OP_Is
f7d0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
f7e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f7f0: 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  _ISNULL, jump, i
f800: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
f810: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f820: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
f830: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
f840: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
f850: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
f860: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f870: 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
f880: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
f890: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
f8a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
f8b0: 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
f8c0: 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
f8d0: 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
f8e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f8f0: 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
f900: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
f910: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
f920: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
f930: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f940: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
f950: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
f960: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f970: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
f980: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f990: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
f9a0: 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
f9b0: 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
f9c0: 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
f9d0: 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
f9e0: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
f9f0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
fa00: 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
fa10: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
fa20: 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
fa30: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
fa40: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
fa50: 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
fa60: 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
fa70: 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
fa80: 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
fa90: 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
faa0: 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
fab0: 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
fac0: 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
fad0: 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
fae0: 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
faf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
fb00: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
fb10: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
fb20: 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
fb30: 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
fb40: 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
fb50: 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
fb60: 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
fb70: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
fb80: 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
fb90: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
fba0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
fbb0: 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
fbc0: 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
fbd0: 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
fbe0: 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
fbf0: 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
fc00: 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
fc10: 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
fc20: 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
fc30: 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
fc40: 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
fc50: 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
fc60: 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
fc70: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
fc80: 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
fc90: 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
fca0: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
fcb0: 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63 61  s bit set..*/.ca
fcc0: 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
fcd0: 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a    u32 payloadSiz
fce0: 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e;   /* Number o
fcf0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
fd00: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70  ecord */.  i64 p
fd10: 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
fd20: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
fd30: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
fd40: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
fd50: 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c         /* P1 val
fd60: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
fd70: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
fd80: 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75           /* colu
fd90: 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74  mn number to ret
fda0: 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43  rieve */.  VdbeC
fdb0: 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
fdc0: 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
fdd0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63   */.  char *zRec
fde0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ;        /* Poin
fdf0: 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  ter to complete 
fe00: 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20  record-data */. 
fe10: 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
fe20: 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
fe30: 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
fe40: 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20   *aType;        
fe50: 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64  /* aType[i] hold
fe60: 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  s the numeric ty
fe70: 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63  pe of the i-th c
fe80: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a  olumn */.  u32 *
fe90: 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a  aOffset;      /*
fea0: 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f   aOffset[i] is o
feb0: 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f  ffset to start o
fec0: 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20  f data for i-th 
fed0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
fee0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  nField;        /
fef0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * number of fiel
ff00: 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
ff10: 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
ff20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
ff30: 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
ff40: 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
ff50: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
ff60: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
ff70: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
ff80: 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  nter */.  char *
ff90: 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  zData;       /* 
ffa0: 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
ffb0: 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
ffc0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
ffd0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
ffe0: 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
fff0: 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
10000 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
10010 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
10020 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
10030 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
10040 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20  /.  u8 *zIdx;   
10050 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
10060 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20  into header */. 
10070 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20   u8 *zEndHdr;   
10080 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10090 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
100a0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
100b0 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20  .  u32 offset;  
100c0 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
100d0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f  into the data */
100e0 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20  .  u32 szField; 
100f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10100 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
10110 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65  content of a fie
10120 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64  ld */.  int szHd
10130 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  r;         /* Si
10140 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
10150 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73   size field at s
10160 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a  tart of record *
10170 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20  /.  int avail;  
10180 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10190 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
101a0 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
101b0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
101c0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
101d0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
101e0 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f  r */...  p1 = pO
101f0 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
10200 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b  p->p2;.  pC = 0;
10210 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
10220 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
10230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
10240 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
10250 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
10260 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
10270 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
10280 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
10290 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  ];.  MemSetTypeF
102a0 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
102b0 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30  ull);.  zRec = 0
102c0 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f  ;..  /* This blo
102d0 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69  ck sets the vari
102e0 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65  able payloadSize
102f0 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c   to be the total
10300 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20   number of.  ** 
10310 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
10320 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a  ord..  **.  ** z
10330 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65  Rec is set to be
10340 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65   the complete te
10350 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  xt of the record
10360 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
10370 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f  ble..  ** The co
10380 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65  mplete record te
10390 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61  xt is always ava
103a0 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64  ilable for pseud
103b0 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66  o-tables.  ** If
103c0 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   the record is s
103d0 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f  tored in a curso
103e0 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  r, the complete 
103f0 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a  record text.  **
10400 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61   might be availa
10410 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e  ble in the  pC->
10420 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20  aRow cache.  Or 
10430 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e  it might not be.
10440 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74  .  ** If the dat
10450 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  a is unavailable
10460 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74  ,  zRec is set t
10470 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a  o NULL..  **.  *
10480 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74  * We also comput
10490 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
104a0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
104b0 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73  ecord.  For curs
104c0 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75  ors,.  ** the nu
104d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
104e0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
104f0 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65   VdbeCursor.nFie
10500 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f  ld element..  */
10510 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
10520 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  [p1];.  assert( 
10530 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  pC!=0 );.#ifndef
10540 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
10550 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65  TUALTABLE.  asse
10560 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  rt( pC->pVtabCur
10570 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66  sor==0 );.#endif
10580 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
10590 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
105a0 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
105b0 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   The record is s
105c0 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65  tored in a B-Tre
105d0 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  e */.    rc = sq
105e0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
105f0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
10600 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
10610 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
10620 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
10630 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61  lRow ){.      pa
10640 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20  yloadSize = 0;. 
10650 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
10660 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d  >cacheStatus==p-
10670 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20  >cacheCtr ){.   
10680 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10690 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
106a0 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28  ;.      zRec = (
106b0 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a  char*)pC->aRow;.
106c0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
106d0 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
106e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
106f0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
10700 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
10710 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
10720 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
10730 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
10740 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65  e64);.      asse
10750 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
10760 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62  K );   /* True b
10770 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
10780 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
10790 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ove */.      /* 
107a0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
107b0 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
107c0 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
107d0 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
107e0 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
107f0 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
10800 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
10810 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
10820 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
10830 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
10840 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
10850 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20  payloadSize64 & 
10860 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d  SQLITE_MAX_U32)=
10870 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a  =(u64)payloadSiz
10880 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79  e64 );.      pay
10890 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
108a0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
108b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
108c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
108d0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
108e0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
108f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
10900 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
10910 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29  r, &payloadSize)
10920 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
10930 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
10940 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
10950 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
10960 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
10970 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
10980 65 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70 52  eReg>0 ){.    pR
10990 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
109a0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
109b0 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
109c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
109d0 6f 62 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61  ob );.    payloa
109e0 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b  dSize = pReg->n;
109f0 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67  .    zRec = pReg
10a00 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ->z;.    pC->cac
10a10 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d  heStatus = (pOp-
10a20 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52  >p5&OPFLAG_CLEAR
10a30 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53  CACHE) ? CACHE_S
10a40 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43  TALE : p->cacheC
10a50 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  tr;.    assert( 
10a60 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
10a70 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d  | zRec!=0 );.  }
10a80 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e  else{.    /* Con
10a90 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f  sider the row to
10aa0 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   be NULL */.    
10ab0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
10ac0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10ad0 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10ae0 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10af0 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10b00 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10b10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
10b20 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10b30 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
10b40 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10b50 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
10b60 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10b70 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10b80 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10b90 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10ba0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10bb0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10bc0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10bd0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
10be0 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61   pC->nField;.  a
10bf0 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
10c00 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
10c10 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
10c20 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
10c30 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
10c40 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
10c50 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
10c60 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
10c70 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
10c80 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
10c90 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
10ca0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10cb0 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10cc0 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
10cd0 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
10ce0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10cf0 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76  t(aType);.    av
10d00 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  ail = 0;.    pC-
10d10 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
10d20 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
10d30 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
10d40 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
10d50 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
10d60 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
10d70 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
10d80 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
10d90 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
10da0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
10db0 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
10dc0 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
10dd0 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
10de0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
10df0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10e00 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
10e10 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
10e20 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
10e30 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
10e40 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
10e50 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
10e60 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
10e70 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
10e80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
10e90 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
10ea0 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
10eb0 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
10ec0 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
10ed0 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
10ee0 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
10ef0 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
10f00 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
10f10 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
10f20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
10f30 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
10f40 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
10f50 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
10f60 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
10f70 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
10f80 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
10f90 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  l>=0 );.      if
10fa0 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ( payloadSize <=
10fb0 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
10fc0 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44         zRec = zD
10fd0 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ata;.        pC-
10fe0 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61  >aRow = (u8*)zDa
10ff0 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ta;.      }else{
11000 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
11010 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  w = 0;.      }. 
11020 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20     }.    /* The 
11030 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
11040 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20   is true in all 
11050 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65  cases accept whe
11060 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
11070 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62  abase file has b
11080 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78  een corrupted ex
11090 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a  ternally..    **
110a0 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63      assert( zRec
110b0 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61  !=0 || avail>=pa
110c0 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61  yloadSize || ava
110d0 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20  il>=9 ); */.    
110e0 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e  szHdr = getVarin
110f0 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
11100 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
11110 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
11120 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
11130 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
11140 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
11150 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
11160 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
11170 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
11180 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
11190 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
111a0 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
111b0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
111c0 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
111d0 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
111e0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
111f0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
11200 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
11210 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
11220 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
11230 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
11240 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
11250 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
11260 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
11270 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
11280 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
11290 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
112a0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
112b0 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
112c0 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
112d0 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
112e0 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
112f0 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
11300 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
11310 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20  set > 98307 ){. 
11320 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
11330 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
11340 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11350 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  umn_out;.    }..
11360 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69      /* Compute i
11370 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  n len the number
11380 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
11390 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61  a we need to rea
113a0 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  d in order.    *
113b0 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20  * to get nField 
113c0 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66  type values.  of
113d0 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72  fset is an upper
113e0 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20   bound on this. 
113f0 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65   But.    ** nFie
11400 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e  ld might be sign
11410 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74  ificantly less t
11420 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d  han the true num
11430 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20  ber of columns. 
11440 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62     ** in the tab
11450 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20  le, and in that 
11460 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33  case, 5*nField+3
11470 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65   might be smalle
11480 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20  r than offset.. 
11490 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f     ** We want to
114a0 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e   minimize len in
114b0 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20   order to limit 
114c0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
114d0 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c  memory.    ** al
114e0 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69  location, especi
114f0 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70  ally if a corrup
11500 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file 
11510 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65  has caused offse
11520 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f  t.    ** to be o
11530 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74  versized. Offset
11540 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39   is limited to 9
11550 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74  8307 above.  But
11560 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20   98307 might.   
11570 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64   ** still exceed
11580 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11590 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
115a0 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75   on some configu
115b0 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20  rations..    ** 
115c0 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  On systems that 
115d0 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20  cannot tolerate 
115e0 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
115f0 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64  ocations, nField
11600 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  *5+3.    ** will
11610 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20   likely be much 
11620 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46  smaller since nF
11630 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  ield will likely
11640 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20   be less than.  
11650 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20    ** 20 or so.  
11660 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61  This insures tha
11670 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  t Robson memory 
11680 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11690 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74  s are.    ** not
116a0 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66   exceeded even f
116b0 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62  or corrupt datab
116c0 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a  ase files..    *
116d0 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65  /.    len = nFie
116e0 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66  ld*5 + 3;.    if
116f0 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66  ( len > (int)off
11700 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74  set ) len = (int
11710 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a  )offset;..    /*
11720 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
11730 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
11740 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
11750 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
11760 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
11770 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
11780 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
11790 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
117a0 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
117b0 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
117c0 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
117d0 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
117e0 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
117f0 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
11800 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
11810 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
11820 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
11830 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11840 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
11850 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
11860 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
11870 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
11880 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20  ec && avail<len 
11890 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
118a0 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
118b0 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
118c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
118d0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
118e0 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43  Crsr, 0, len, pC
118f0 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d  ->isIndex, &sMem
11900 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
11910 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
11920 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11930 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11940 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
11950 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20  sMem.z;.    }.  
11960 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20    zEndHdr = (u8 
11970 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20  *)&zData[len];. 
11980 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29     zIdx = (u8 *)
11990 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a  &zData[szHdr];..
119a0 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20      /* Scan the 
119b0 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69  header and use i
119c0 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65  t to fill in the
119d0 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66   aType[] and aOf
119e0 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72  fset[].    ** ar
119f0 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20  rays.  aType[i] 
11a00 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
11a10 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f   type integer fo
11a20 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a  r the i-th.    *
11a30 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66  * column and aOf
11a40 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  fset[i] will con
11a50 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20  tain the offset 
11a60 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
11a70 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ng.    ** of the
11a80 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73   record to the s
11a90 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61  tart of the data
11aa0 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f   for the i-th co
11ab0 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lumn.    */.    
11ac0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c  for(i=0; i<nFiel
11ad0 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  d; i++){.      i
11ae0 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20  f( zIdx<zEndHdr 
11af0 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  ){.        aOffs
11b00 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[i] = offset;.
11b10 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20          zIdx += 
11b20 67 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78  getVarint32(zIdx
11b30 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20  , aType[i]);.   
11b40 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73       szField = s
11b50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11b60 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d  TypeLen(aType[i]
11b70 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65  );.        offse
11b80 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20  t += szField;.  
11b90 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
11ba0 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20  <szField ){  /* 
11bb0 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f  True if offset o
11bc0 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20  verflows */.    
11bd0 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a 45        zIdx = &zE
11be0 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f  ndHdr[1];  /* Fo
11bf0 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52  rces SQLITE_CORR
11c00 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77  UPT return below
11c10 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72   */.          br
11c20 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
11c30 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11c40 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c      /* If i is l
11c50 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c  ess that nField,
11c60 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
11c70 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74  less fields in t
11c80 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  his.        ** r
11c90 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75  ecord than SetNu
11ca0 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74  mColumns indicat
11cb0 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c  ed there are col
11cc0 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20  umns in the.    
11cd0 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65      ** table. Se
11ce0 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72  t the offset for
11cf0 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d   any extra colum
11d00 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69  ns not present i
11d10 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  n.        ** the
11d20 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68   record to 0. Th
11d30 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65  is tells code be
11d40 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e  low to store a N
11d50 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  ULL.        ** i
11d60 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69  nstead of deseri
11d70 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20  alizing a value 
11d80 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
11d90 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
11da0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
11db0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
11dc0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
11dd0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
11de0 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61  m);.    sMem.fla
11df0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a  gs = MEM_Null;..
11e00 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
11e10 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
11e20 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
11e30 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
11e40 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a  e header,.    **
11e50 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
11e60 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
11e70 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70   appears to be p
11e80 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
11e90 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  he.    ** record
11ea0 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  , or if the end 
11eb0 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
11ec0 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
11ed0 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20  before the end. 
11ee0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
11ef0 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69  ord (when all fi
11f00 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74  elds present), t
11f10 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64  hen we must be d
11f20 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77  ealing .    ** w
11f30 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
11f40 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20  tabase..    */. 
11f50 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a     if( (zIdx > z
11f60 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73  EndHdr) || (offs
11f70 65 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65  et > payloadSize
11f80 29 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a  ).         || (z
11f90 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Idx==zEndHdr && 
11fa0 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53  offset!=payloadS
11fb0 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63  ize) ){.      rc
11fc0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
11fd0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
11fe0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
11ff0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
12000 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e  * Get the column
12010 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66   information. If
12020 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
12030 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a  non-zero, then .
12040 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65    ** deserialize
12050 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20   the value from 
12060 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61  the record. If a
12070 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65  Offset[p2] is ze
12080 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68  ro,.  ** then th
12090 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75  ere are not enou
120a0 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  gh fields in the
120b0 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73   record to satis
120c0 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75  fy the.  ** requ
120d0 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61  est.  In this ca
120e0 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75  se, set the valu
120f0 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20  e NULL or to P4 
12100 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20  if P4 is.  ** a 
12110 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d  pointer to a Mem
12120 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   object..  */.  
12130 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20  if( aOffset[p2] 
12140 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
12150 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
12160 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
12170 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12180 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72  eMemReleaseExter
12190 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  nal(pDest);.    
121a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
121b0 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52  ialGet((u8 *)&zR
121c0 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c  ec[aOffset[p2]],
121d0 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73   aType[p2], pDes
121e0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
121f0 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74       len = sqlit
12200 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
12210 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a  Len(aType[p2]);.
12220 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12230 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20  eMemMove(&sMem, 
12240 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63  pDest);.      rc
12250 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
12260 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
12270 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
12280 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  en, pC->isIndex,
12290 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
122a0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
122b0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
122c0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
122d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
122e0 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
122f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
12300 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44  erialGet((u8*)zD
12310 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  ata, aType[p2], 
12320 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20  pDest);.    }.  
12330 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
12340 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65  ncoding;.  }else
12350 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
12360 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
12370 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12380 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
12390 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e  (pDest, pOp->p4.
123a0 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pMem, MEM_Static
123b0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
123c0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73      assert( pDes
123d0 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  t->flags&MEM_Nul
123e0 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  l );.    }.  }..
123f0 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d    /* If we dynam
12400 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12410 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   space to hold t
12420 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a  he data (in the.
12430 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
12440 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63  MemFromBtree() c
12450 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20  all above) then 
12460 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c  transfer control
12470 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79   of that.  ** dy
12480 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
12490 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74  ted space over t
124a0 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75  o the pDest stru
124b0 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73  cture..  ** This
124c0 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f   prevents a memo
124d0 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20  ry copy..  */.  
124e0 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  if( sMem.zMalloc
124f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
12500 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61  sMem.z==sMem.zMa
12510 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65  lloc );.    asse
12520 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
12530 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  gs & MEM_Dyn) );
12540 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
12550 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Dest->flags & (M
12560 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
12570 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73  ) || pDest->z==s
12580 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65  Mem.z );.    pDe
12590 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  st->flags &= ~(M
125a0 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61  EM_Ephem|MEM_Sta
125b0 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  tic);.    pDest-
125c0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
125d0 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  rm;.    pDest->z
125e0 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70   = sMem.z;.    p
125f0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  Dest->zMalloc = 
12600 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  sMem.zMalloc;.  
12610 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  }..  rc = sqlite
12620 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
12630 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f  eable(pDest);..o
12640 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20  p_column_out:.  
12650 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12660 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45  IZE(pDest);.  RE
12670 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
12680 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
12690 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
126a0 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
126b0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
126c0 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
126d0 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
126e0 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
126f0 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
12700 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
12710 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
12720 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
12730 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
12740 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
12750 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
12760 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
12770 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
12780 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
12790 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
127a0 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
127b0 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
127c0 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
127d0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
127e0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
127f0 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
12800 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20  .  char cAff;   
12810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
12820 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
12830 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f  r of affinity */
12840 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
12850 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
12860 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
12870 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
12880 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
12890 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
128a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
128b0 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20  .  while( (cAff 
128c0 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  = *(zAffinity++)
128d0 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )!=0 ){.    asse
128e0 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e  rt( pIn1 <= &p->
128f0 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
12900 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
12910 70 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79  pIn1);.    apply
12920 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63  Affinity(pIn1, c
12930 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Aff, encoding);.
12940 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
12950 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12960 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
12970 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
12980 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
12990 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
129a0 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
129b0 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74 72 79  o a single entry
129c0 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66 6f 72  .** suitable for
129d0 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
129e0 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
129f0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
12a00 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
12a10 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74 61 69  ndex.  The detai
12a20 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 74  ls of the format
12a30 20 61 72 65 20 69 72 72 65 6c 65 76 61 6e 74 20   are irrelevant 
12a40 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68  as long as.** th
12a50 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
12a60 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
12a70 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
12a80 2a 2a 20 52 65 66 65 72 20 74 6f 20 73 6f 75 72  ** Refer to sour
12a90 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73  ce code comments
12aa0 20 66 6f 72 20 74 68 65 20 64 65 74 61 69 6c 73   for the details
12ab0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 0a 2a   of the record.*
12ac0 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20  * format..**.** 
12ad0 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
12ae0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
12af0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
12b00 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
12b10 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
12b20 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
12b30 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
12b40 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
12b50 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
12b60 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
12b70 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
12b80 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
12b90 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
12ba0 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
12bb0 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
12bc0 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
12bd0 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
12be0 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
12bf0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
12c00 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
12c10 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
12c20 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
12c30 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
12c40 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
12c50 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
12c60 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
12c70 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
12c80 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
12c90 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
12ca0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
12cb0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
12cc0 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
12cd0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12ce0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
12cf0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
12d00 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
12d10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12d20 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
12d30 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
12d40 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
12d50 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
12d60 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
12d70 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12d80 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
12d90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12da0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
12db0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
12dc0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
12dd0 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
12de0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12df0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
12e00 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
12e10 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
12e20 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
12e30 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
12e40 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
12e50 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
12e60 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
12e70 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
12e80 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
12e90 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
12ea0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
12eb0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
12ec0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12ed0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
12ee0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
12ef0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
12f00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
12f10 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
12f20 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
12f30 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
12f40 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
12f50 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
12f60 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
12f70 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
12f80 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
12f90 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
12fa0 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  rd[] */.  int le
12fb0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
12fc0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
12fd0 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
12fe0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
12ff0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
13000 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
13010 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
13020 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
13030 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
13040 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13060 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13070 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13080 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
13090 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
130a0 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
130b0 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
130c0 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
130d0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
130e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
130f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13100 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13110 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
13120 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
13130 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
13140 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
13150 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
13160 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
13170 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
13180 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
13190 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
131a0 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
131b0 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
131c0 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
131d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
131e0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
131f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13200 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
13210 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
13220 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
13230 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
13240 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
13250 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
13260 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13270 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
13280 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
13290 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
132a0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
132b0 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
132c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
132d0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
132e0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
132f0 20 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20    nByte = 0;    
13300 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
13310 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
13320 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
13330 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
13340 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13350 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
13360 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
13370 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
13380 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
13390 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
133a0 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
133b0 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
133c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
133d0 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b  nField<=p->nMem+
133e0 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
133f0 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  &aMem[nField];. 
13400 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
13410 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
13420 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
13430 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
13440 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
13450 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f  ormat;..  /* Loo
13460 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
13470 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
13480 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
13490 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
134a0 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
134b0 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
134c0 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
134d0 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cord..  */.  for
134e0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
134f0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
13500 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66  +){.    if( zAff
13510 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
13520 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
13530 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
13540 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
13550 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ing);.    }.    
13560 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26  if( pRec->flags&
13570 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63  MEM_Zero && pRec
13580 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ->n>0 ){.      s
13590 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
135a0 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
135b0 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f     }.    serial_
135c0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
135d0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
135e0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
135f0 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
13600 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13610 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
13620 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  ;.    nData += l
13630 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  en;.    nHdr += 
13640 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
13650 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
13660 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
13670 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
13680 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  .      /* Only p
13690 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  ure zero-filled 
136a0 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70  BLOBs can be inp
136b0 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64  ut to this Opcod
136c0 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64  e..      ** We d
136d0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62  o not allow blob
136e0 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20  s with a prefix 
136f0 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65  and a zero-fille
13700 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20  d tail. */.     
13710 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
13720 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
13730 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20  se if( len ){.  
13740 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
13750 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41     }.  }..  /* A
13760 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68  dd the initial h
13770 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64  eader varint and
13780 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20   total the size 
13790 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  */.  nHdr += nVa
137a0 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
137b0 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
137c0 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
137d0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
137e0 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b  dr) ){.    nHdr+
137f0 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
13800 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72   nHdr+nData-nZer
13810 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  o;.  if( nByte>d
13820 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
13830 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
13840 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
13850 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
13860 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
13870 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
13880 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
13890 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
138a0 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
138b0 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
138c0 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
138d0 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
138e0 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
138f0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
13900 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
13910 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
13920 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
13930 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
13940 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
13950 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
13960 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
13970 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13980 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
13990 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
139a0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
139b0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
139c0 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  3];.  if( sqlite
139d0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
139e0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
139f0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
13a00 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
13a10 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
13a20 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
13a30 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
13a40 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
13a50 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
13a60 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
13a70 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
13a80 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
13a90 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
13aa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13ab0 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
13ac0 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
13ad0 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
13ae0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
13af0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
13b00 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
13b10 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28  pe */.  }.  for(
13b20 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13b30 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13b40 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61  ){  /* serial da
13b50 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73  ta */.    i += s
13b60 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13b70 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
13b80 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d  i], (int)(nByte-
13b90 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f  i), pRec,file_fo
13ba0 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  rmat);.  }.  ass
13bb0 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b  ert( i==nByte );
13bc0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
13bd0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
13be0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
13bf0 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
13c00 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
13c10 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20  gs = MEM_Blob | 
13c20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d  MEM_Dyn;.  pOut-
13c30 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
13c40 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
13c50 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
13c60 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
13c70 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
13c80 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
13c90 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
13ca0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
13cb0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
13cc0 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
13cd0 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
13ce0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
13cf0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
13d00 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
13d10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13d20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
13d30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
13d40 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
13d50 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
13d60 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
13d70 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
13d80 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
13d90 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
13da0 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
13db0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13dc0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
13dd0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
13de0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
13df0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
13e00 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
13e10 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
13e20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
13e30 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
13e40 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
13e50 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
13e60 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
13e70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
13e80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
13e90 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
13ea0 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
13eb0 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
13ec0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
13ed0 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
13ee0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
13ef0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
13f00 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
13f10 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
13f20 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
13f30 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
13f40 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
13f50 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
13f60 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
13f70 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
13f80 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
13f90 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
13fa0 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
13fb0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
13fc0 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
13fd0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
13fe0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14010 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
14020 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
14050 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
14060 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
14070 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
14080 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
14090 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
140a0 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
140b0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
140c0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
140d0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
140e0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
140f0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
14100 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
14110 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
14120 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
14130 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
14140 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
14150 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
14160 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
14170 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
14180 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
14190 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
141a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
141b0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
141c0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
141d0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
141e0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
141f0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
14200 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
14210 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
14220 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
14230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
14240 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
14250 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70  (db) );..  if( p
14260 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14270 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
14280 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14290 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
142a0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
142b0 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
142c0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
142d0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
142e0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
142f0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
14300 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
14310 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
14320 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
14330 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14340 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
14350 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
14360 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
14370 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
14380 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
14390 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
143a0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
143b0 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
143c0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
143d0 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20  30(zName);..    
143e0 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
143f0 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
14400 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
14410 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
14420 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
14430 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
14440 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
14450 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
14460 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
14470 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
14480 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
14490 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
144a0 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
144b0 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
144c0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
144d0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
144e0 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
144f0 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
14500 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
14510 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
14520 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
14530 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
14540 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
14550 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
14560 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
14570 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14580 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
14590 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
145a0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
145b0 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
145c0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
145d0 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
145e0 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
145f0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
14600 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
14610 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
14620 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
14630 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
14640 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
14650 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
14660 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
14670 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
14680 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14690 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
146a0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
146b0 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
146c0 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
146d0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
146e0 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
146f0 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
14700 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
14710 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
14720 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
14730 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
14740 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
14750 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
14760 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
14770 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
14780 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
14790 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
147a0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
147b0 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
147c0 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
147d0 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
147e0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
147f0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14800 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14810 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
14820 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
14830 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
14840 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
14850 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20  }else if( .     
14860 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65     db->writeVdbe
14870 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41  Cnt>0 || (p1==SA
14880 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
14890 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
148a0 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
148b0 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
148c0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
148d0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
148e0 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
148f0 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
14900 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
14910 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20   statements. It 
14920 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
14930 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61  to rollback a sa
14940 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a  vepoint.      **
14950 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
14960 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  y active stateme
14970 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20  nts at all..    
14980 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
14990 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
149a0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
149b0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73        "cannot %s
149c0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
149d0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
149e0 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20  rogress",.      
149f0 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54    (p1==SAVEPOINT
14a00 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c  _ROLLBACK ? "rol
14a10 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65  lback": "release
14a20 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
14a30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
14a40 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
14a50 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
14a60 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
14a70 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
14a80 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
14a90 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
14aa0 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
14ab0 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
14ac0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
14ad0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
14ae0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
14af0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
14b00 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
14b10 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
14b20 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
14b30 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
14b40 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
14b50 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
14b60 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
14b70 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
14b80 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
14b90 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
14ba0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
14bb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14bc0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
14bd0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
14be0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
14bf0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
14c00 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
14c10 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
14c20 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
14c30 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
14c40 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  pc;.          db
14c50 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
14c60 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
14c70 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
14c80 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
14c90 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
14ca0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14cb0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
14cc0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
14cd0 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
14ce0 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
14cf0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61  lse{.        iSa
14d00 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
14d10 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
14d20 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
14d30 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
14d40 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
14d50 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
14d60 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
14d70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
14d80 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
14d90 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
14da0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
14db0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
14dc0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
14dd0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
14de0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
14df0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
14e00 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
14e10 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
14e20 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
14e30 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
14e40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
14e50 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
14e60 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
14e70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
14e80 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
14e90 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20  a(db, 0);.      
14ea0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
14eb0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
14ec0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
14ed0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
14ee0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
14ef0 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
14f00 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
14f10 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
14f20 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
14f30 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
14f40 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
14f50 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
14f60 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
14f70 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
14f80 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
14f90 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
14fa0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
14fb0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
14fc0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
14fd0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
14fe0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
14ff0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
15000 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
15010 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
15020 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
15030 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
15040 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
15050 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
15060 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
15070 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
15080 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
15090 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
150a0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
150b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
150c0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
150d0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
150e0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
150f0 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
15100 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
15110 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
15120 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
15130 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
15140 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
15150 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
15160 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
15170 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
15180 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
15190 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
151a0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
151b0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
151c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
151d0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
151e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
151f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
15200 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
15210 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
15220 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
15230 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
15240 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15250 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
15260 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
15270 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
15280 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
15290 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
152a0 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
152b0 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
152c0 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
152d0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
152e0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
152f0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
15300 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
15310 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
15320 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
15330 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
15340 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
15350 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
15360 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
15370 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
15380 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
15390 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
153a0 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
153b0 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
153c0 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
153d0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
153e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
153f0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
15400 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
15410 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
15420 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
15430 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
15440 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
15450 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
15460 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
15470 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
15480 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
15490 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
154a0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
154b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
154c0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
154d0 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
154e0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
154f0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
15500 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  nt>0 );  /* At l
15510 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
15520 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20   is active */.. 
15530 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
15540 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
15550 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
15560 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
15570 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
15580 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
15590 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
155a0 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
155b0 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
155c0 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
155d0 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
155e0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
155f0 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
15600 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
15610 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
15620 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
15630 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15640 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15650 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
15660 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
15670 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
15680 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
15690 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
156a0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
156b0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72  .  }else if( tur
156c0 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
156d0 61 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65  ack && db->write
156e0 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
156f0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
15700 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
15710 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
15720 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
15730 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74  iting.    ** ret
15740 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
15750 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
15760 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
15770 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
15780 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
15790 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
157a0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
157b0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
157c0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
157d0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
157e0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
157f0 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
15800 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
15810 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
15820 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
15830 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
15840 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
15850 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
15860 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15870 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
15880 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
15890 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  b);.      db->au
158a0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
158b0 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
158c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
158d0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
158e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
158f0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
15900 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15910 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15920 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
15930 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
15940 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15950 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
15960 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
15970 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
15980 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15990 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
159a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
159b0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
159c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
159d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
159e0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
159f0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
15a00 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
15a10 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
15a20 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
15a30 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
15a40 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
15a50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
15a60 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
15a70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15a80 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
15a90 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
15aa0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15ab0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
15ac0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15ad0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
15ae0 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
15af0 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
15b00 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
15b10 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
15b20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
15b30 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
15b40 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
15b50 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
15b60 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
15b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b80 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
15b90 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
15ba0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
15bb0 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
15bc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
15bd0 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
15be0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
15bf0 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
15c00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
15c10 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
15c20 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
15c30 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
15c40 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
15c50 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
15c60 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
15c70 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
15c80 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
15c90 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
15ca0 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
15cb0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
15cc0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
15cd0 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
15ce0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
15cf0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
15d00 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
15d10 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
15d20 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
15d30 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
15d40 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
15d50 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
15d60 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
15d70 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
15d80 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
15d90 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
15da0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
15db0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
15dc0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
15dd0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
15de0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
15df0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
15e00 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
15e10 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
15e20 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
15e30 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
15e40 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
15e50 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
15e60 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
15e70 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
15e80 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
15e90 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
15ea0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
15eb0 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
15ec0 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
15ed0 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
15ee0 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
15ef0 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
15f00 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
15f10 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
15f20 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
15f30 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
15f40 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
15f50 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72  .  If P2 is 2 or
15f60 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e   greater then an
15f70 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
15f80 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64  is also obtained
15f90 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e  .** on the file.
15fa0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
15fb0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
15fc0 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
15fd0 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
15fe0 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
15ff0 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
16000 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
16010 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
16020 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
16030 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
16040 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
16050 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
16060 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
16070 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
16080 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
16090 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
160a0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
160b0 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
160c0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
160d0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
160e0 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
160f0 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
16100 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
16110 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
16120 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
16130 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
16140 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66  on allows the af
16150 66 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a  fects of this.**
16160 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
16170 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
16180 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
16190 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
161a0 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
161b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
161c0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
161d0 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
161e0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
161f0 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
16200 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
16210 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
16220 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
16230 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
16240 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f  a read-lock is o
16250 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64  btained on the d
16260 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f  atabase file..*/
16270 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
16280 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
16290 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
162a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
162b0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
162c0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
162d0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
162e0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
162f0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
16300 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20  pOp->p1].pBt;.. 
16310 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
16320 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16330 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c  eBeginTrans(pBt,
16340 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69   pOp->p2);.    i
16350 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
16360 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
16370 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d  c = pc;.      p-
16380 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
16390 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
163a0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
163b0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
163c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
163d0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
163e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
163f0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
16400 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
16410 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
16420 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
16430 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63  mit==0 || db->ac
16440 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a  tiveVdbeCnt>1) .
16450 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
16460 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
16470 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
16480 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
16490 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
164a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
164b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
164c0 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
164d0 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
164e0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
164f0 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
16500 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
16510 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
16520 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
16530 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
16540 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
16550 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
16560 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20  iStatement);..  
16570 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
16580 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
16590 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
165a0 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
165b0 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
165c0 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
165d0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
165e0 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
165f0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
16600 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
16610 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
16620 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
16630 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
16640 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
16650 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
16660 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
16670 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
16680 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
16690 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
166a0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
166b0 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
166c0 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
166d0 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
166e0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
166f0 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
16700 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
16710 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
16720 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
16730 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
16740 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
16750 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
16760 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
16770 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
16780 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
16790 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
167a0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
167b0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
167c0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
167d0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
167e0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
167f0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
16800 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
16810 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
16820 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
16830 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
16840 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
16850 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
16860 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
16870 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
16880 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
16890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
168a0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
168b0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
168c0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
168d0 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20  iCookie;..  iDb 
168e0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
168f0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
16900 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
16910 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
16920 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
16930 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
16940 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
16950 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
16960 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
16970 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
16980 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
16990 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  !=0 );..  sqlite
169a0 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
169b0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
169c0 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
169d0 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d  &iMeta);.  pOut-
169e0 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
169f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16a00 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
16a10 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
16a20 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
16a30 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
16a40 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
16a50 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
16a60 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
16a70 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
16a80 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
16a90 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
16aa0 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
16ab0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
16ac0 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
16ad0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
16ae0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
16af0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
16b00 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
16b10 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16b20 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
16b30 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
16b40 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
16b50 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
16b60 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
16b70 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
16b80 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
16b90 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
16ba0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
16bb0 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
16bc0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
16bd0 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
16be0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
16bf0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16c00 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16c10 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
16c20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
16c30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
16c40 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
16c50 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
16c60 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
16c70 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
16c80 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
16c90 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  0 );.  pIn3 = &a
16ca0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16cb0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
16cc0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
16cd0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
16ce0 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
16cf0 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
16d00 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
16d10 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
16d20 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
16d30 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
16d40 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
16d50 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
16d60 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
16d70 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
16d80 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
16d90 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
16da0 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
16db0 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
16dc0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
16dd0 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
16de0 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
16df0 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
16e00 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
16e10 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
16e20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
16e30 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
16e40 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
16e50 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
16e60 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
16e70 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
16e80 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
16e90 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
16ea0 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
16eb0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
16ec0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
16ed0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
16ee0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
16ef0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
16f00 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
16f10 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
16f20 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
16f30 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
16f40 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
16f50 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
16f60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
16f70 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
16f80 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a  ookie P1 P2 *.**
16f90 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
16fa0 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
16fb0 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
16fc0 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
16fd0 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
16fe0 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
16ff0 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
17000 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68  2.  .** P1 is th
17010 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
17020 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
17030 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17040 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
17050 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
17060 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
17070 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
17080 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
17090 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
170a0 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
170b0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
170c0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
170d0 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
170e0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
170f0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
17100 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
17110 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
17120 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
17130 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
17140 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
17150 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
17160 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
17170 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
17180 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
17190 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
171a0 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
171b0 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
171c0 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
171d0 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
171e0 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
171f0 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
17200 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
17210 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
17220 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
17230 65 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  eta;.  Btree *pB
17240 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  t;.  assert( pOp
17250 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
17260 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
17270 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
17280 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
17290 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
172a0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
172b0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
172c0 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pBt ){.    sqlit
172d0 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
172e0 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
172f0 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
17300 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73  )&iMeta);.  }els
17310 65 7b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30  e{.    iMeta = 0
17320 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74  ;.  }.  if( iMet
17330 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  a!=pOp->p2 ){.  
17340 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
17350 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
17360 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
17370 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
17380 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
17390 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
173a0 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
173b0 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
173c0 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
173d0 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
173e0 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
173f0 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
17400 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
17410 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
17420 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
17430 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
17440 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
17450 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
17460 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
17470 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
17480 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
17490 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
174a0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
174b0 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
174c0 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
174d0 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
174e0 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
174f0 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
17500 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
17510 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
17520 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
17530 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
17540 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
17550 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
17560 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
17570 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
17580 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
17590 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
175a0 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
175b0 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
175c0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
175d0 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
175e0 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
175f0 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
17600 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
17610 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
17620 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
17630 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
17640 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
17650 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
17660 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
17670 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
17680 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
17690 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
176a0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
176b0 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
176c0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
176d0 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
176e0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  b, pOp->p1);.   
176f0 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45   }..    sqlite3E
17700 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17710 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17720 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
17730 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
17740 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17750 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
17760 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
17770 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63  en a read-only c
17780 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61  ursor for the da
17790 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f  tabase table who
177a0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a  se root page is.
177b0 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62  ** P2 in a datab
177c0 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64  ase file.  The d
177d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
177e0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33  determined by P3
177f0 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e  . .** P3==0 mean
17800 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
17810 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73  ase, P3==1 means
17820 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
17830 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f  ed for .** tempo
17840 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64  rary tables, and
17850 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64   P3>1 means used
17860 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
17870 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64  ng attached.** d
17880 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74  atabase.  Give t
17890 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e  he new cursor an
178a0 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50   identifier of P
178b0 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61  1.  The P1.** va
178c0 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65  lues need not be
178d0 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20   contiguous but 
178e0 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68  all P1 values sh
178f0 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e  ould be small in
17900 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73  tegers..** It is
17910 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31   an error for P1
17920 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e   to be negative.
17930 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
17940 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e  then use the con
17950 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
17960 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20   P2 as the root 
17970 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65  page, not.** the
17980 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
17990 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  elf..**.** There
179a0 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20   will be a read 
179b0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
179c0 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68  base whenever th
179d0 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65  ere is an.** ope
179e0 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  n cursor.  If th
179f0 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75  e database was u
17a00 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f  nlocked prior to
17a10 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17a20 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64  n.** then a read
17a30 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
17a40 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  d as part of thi
17a50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
17a60 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61  A read.** lock a
17a70 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63  llows other proc
17a80 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68  esses to read th
17a90 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70  e database but p
17aa0 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20  rohibits.** any 
17ab0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72  other process fr
17ac0 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  om modifying the
17ad0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
17ae0 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  read lock is.** 
17af0 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c  released when al
17b00 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c  l cursors are cl
17b10 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69  osed.  If this i
17b20 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d  nstruction attem
17b30 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20  pts.** to get a 
17b40 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61  read lock but fa
17b50 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20  ils, the script 
17b60 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20  terminates with 
17b70 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  an.** SQLITE_BUS
17b80 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  Y error code..**
17b90 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
17ba0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
17bb0 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
17bc0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
17bd0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
17be0 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
17bf0 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
17c00 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
17c10 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
17c20 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
17c30 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
17c40 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
17c50 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
17c60 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
17c70 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
17c80 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
17c90 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
17ca0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
17cb0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
17cc0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
17cd0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
17ce0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
17cf0 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f   OpenWrite..*/./
17d00 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72  * Opcode: OpenWr
17d10 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ite P1 P2 P3 P4 
17d20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P5.**.** Open a 
17d30 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
17d40 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
17d50 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
17d60 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
17d70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69  age is P2.  Or i
17d80 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20  f P5!=0 use the 
17d90 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17da0 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74  ter P2 to find t
17db0 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e  he.** root page.
17dc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17dd0 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
17de0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
17df0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
17e00 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
17e10 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
17e20 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
17e30 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
17e40 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
17e50 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
17e60 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
17e70 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
17e80 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
17e90 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
17ea0 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
17eb0 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
17ec0 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
17ed0 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
17ee0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
17ef0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17f00 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
17f10 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a  ble, or to the.*
17f20 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20  * largest index 
17f30 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66  of any column of
17f40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
17f50 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  is actually used
17f60 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
17f70 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a  truction works j
17f80 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  ust like OpenRea
17f90 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
17fa0 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
17fb0 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
17fc0 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20  te mode.  For a 
17fd0 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65  given table, the
17fe0 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72  re can be one or
17ff0 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a   more read-only.
18000 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20  ** cursors or a 
18010 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74  single read/writ
18020 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74  e cursor but not
18030 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   both..**.** See
18040 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a   also OpenRead..
18050 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
18060 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
18070 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20  nWrite: {.  int 
18080 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
18090 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
180a0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
180b0 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
180c0 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
180d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
180e0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69  .  Db *pDb;..  i
180f0 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
18100 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18110 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61  _ABORT;.    brea
18120 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
18130 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
18140 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
18150 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
18160 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
18170 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
18180 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18190 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
181a0 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30  k & (1<<iDb))!=0
181b0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
181c0 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
181d0 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
181e0 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
181f0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
18200 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
18210 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31  {.    wrFlag = 1
18220 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
18230 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
18240 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
18250 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
18260 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
18270 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
18280 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18290 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
182a0 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
182b0 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
182c0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
182d0 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
182e0 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
182f0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70  p->nMem );.    p
18300 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
18310 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
18320 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
18330 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69  n2);.    p2 = (i
18340 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn2->u.i;.  
18350 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75    /* The p2 valu
18360 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66  e always comes f
18370 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43  rom a prior OP_C
18380 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
18390 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61  e and.    ** tha
183a0 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  t opcode will al
183b0 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20  ways set the p2 
183c0 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f  value to 2 or mo
183d0 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e  re or else fail.
183e0 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65  .    ** If there
183f0 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c   were a failure,
18400 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
18410 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
18420 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a  ve halted.    **
18430 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67   before reaching
18440 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
18450 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45  n. */.    if( NE
18460 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20  VER(p2<2) ) {.  
18470 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18480 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
18490 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
184a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
184b0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
184c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
184d0 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
184e0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
184f0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65  KeyInfo;.    pKe
18500 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
18510 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69  (p->db);.    nFi
18520 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
18530 6e 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73  nField+1;.  }els
18540 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
18550 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
18560 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
18570 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
18580 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
18590 29 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  );.  pCur = allo
185a0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
185b0 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
185c0 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  Db, 1);.  if( pC
185d0 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
185e0 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
185f0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
18600 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
18610 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
18620 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43  ag, pKeyInfo, pC
18630 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
18640 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
18650 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a   pKeyInfo;..  /*
18660 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
18670 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
18680 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
18690 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74  he only values t
186a0 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  hat.  ** sqlite3
186b0 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61  BtreeCursor() ma
186c0 79 20 72 65 74 75 72 6e 20 61 72 65 20 53 51 4c  y return are SQL
186d0 49 54 45 5f 45 4d 50 54 59 20 61 6e 64 20 53 51  ITE_EMPTY and SQ
186e0 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53  LITE_OK. .  ** S
186f0 51 4c 49 54 45 5f 45 4d 50 54 59 20 69 73 20 6f  QLITE_EMPTY is o
18700 6e 6c 79 20 72 65 74 75 72 6e 65 64 20 77 68 65  nly returned whe
18710 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
18720 6f 70 65 6e 20 74 68 65 20 74 61 62 6c 65 0a 20  open the table. 
18730 20 2a 2a 20 72 6f 6f 74 65 64 20 61 74 20 70 61   ** rooted at pa
18740 67 65 20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62  ge 1 of a zero-b
18750 79 74 65 20 64 61 74 61 62 61 73 65 2e 20 20 2a  yte database.  *
18760 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  /.  assert( rc==
18770 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20  SQLITE_EMPTY || 
18780 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
18790 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
187a0 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 70  E_EMPTY ){.    p
187b0 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30  Cur->pCursor = 0
187c0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
187d0 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  E_OK;.  }..  /* 
187e0 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
187f0 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69  or.isTable and i
18800 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73  sIndex variables
18810 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
18820 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
18830 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
18840 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
18850 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
18860 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
18870 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
18880 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
18890 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
188a0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
188b0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
188c0 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
188d0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
188e0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
188f0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
18900 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
18910 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78  .  pCur->isIndex
18920 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
18930 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
18940 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
18950 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
18960 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  P4 *.**.** Open 
18970 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
18980 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
18990 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
189a0 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
189b0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
189c0 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
189d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
189e0 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
189f0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
18a00 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
18a10 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
18a20 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
18a30 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
18a40 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
18a50 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18a60 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
18a70 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
18a80 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
18a90 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
18aa0 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
18ab0 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
18ac0 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
18ad0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
18ae0 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
18af0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
18b00 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
18b10 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
18b20 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
18b30 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
18b40 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64   was once called
18b50 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20   OpenTemp.  But 
18b60 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20  that created.** 
18b70 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73  confusion becaus
18b80 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70  e the term "temp
18b90 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72   table", might r
18ba0 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74  efer either.** t
18bb0 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61  o a TEMP table a
18bc0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
18bd0 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f   or to a table o
18be0 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73  pened by.** this
18bf0 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74   opcode.  Then t
18c00 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63  his opcode was c
18c10 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e  all OpenVirtual.
18c20 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72    But.** that cr
18c30 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20  eated confusion 
18c40 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76  with the whole v
18c50 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65  irtual-table ide
18c60 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  a..*/./* Opcode:
18c70 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
18c80 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
18c90 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
18ca0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
18cb0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
18cc0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
18cd0 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
18ce0 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
18cf0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
18d00 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
18d10 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
18d20 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
18d30 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
18d40 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
18d50 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
18d60 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
18d70 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
18d80 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
18d90 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
18da0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61  rsor *pCx;.  sta
18db0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70  tic const int op
18dc0 65 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  enFlags = .     
18dd0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
18de0 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
18df0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
18e00 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
18e10 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
18e20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
18e30 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
18e40 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
18e50 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
18e60 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  DB;..  assert( p
18e70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
18e80 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
18e90 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
18ea0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
18eb0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
18ec0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
18ed0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
18ee0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
18ef0 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
18f00 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46  0, 1, SQLITE_DEF
18f10 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f  AULT_TEMP_CACHE_
18f20 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  SIZE, openFlags,
18f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f40 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78              &pCx
18f50 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ->pBt);.  if( rc
18f60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
18f70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18f80 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18f90 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
18fa0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
18fb0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
18fc0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
18fd0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
18fe0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
18ff0 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
19000 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
19010 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
19020 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66  BTREE_ZERODATA f
19030 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
19040 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
19050 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
19060 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
19070 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
19080 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
19090 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
190a0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
190b0 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c   (an INTKEY tabl
190c0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
190d0 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49  f( pOp->p4.pKeyI
190e0 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  nfo ){.      int
190f0 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
19100 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
19110 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
19120 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19130 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
19140 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
19150 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  no, BTREE_ZERODA
19160 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  TA); .      if( 
19170 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19180 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
19190 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
191a0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
191b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
191c0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
191d0 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
19200 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
19210 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
19220 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
19230 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
19240 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
19250 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
19260 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
19270 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
19280 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
19290 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
192a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
192b0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
192c0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
192d0 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
192e0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
192f0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
19300 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
19310 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
19320 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
19330 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19340 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
19350 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 P3 * *.**.** O
19360 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
19370 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
19380 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
19390 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
193a0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
193b0 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
193c0 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
193d0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
193e0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
193f0 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
19400 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
19410 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
19420 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
19430 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
19440 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
19450 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
19460 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
19470 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
19480 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
19490 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
194a0 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
194b0 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
194c0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
194d0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
194e0 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
194f0 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
19500 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
19510 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
19520 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
19530 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
19540 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
19550 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
19560 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
19570 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
19580 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
19590 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
195a0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
195b0 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
195c0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
195d0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
195e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
195f0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
19600 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
19610 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
19620 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
19630 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
19640 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
19650 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
19660 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
19670 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
19680 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32  bleReg = pOp->p2
19690 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
196a0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
196b0 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
196c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
196d0 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
196e0 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
196f0 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
19700 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
19710 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
19720 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
19730 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19740 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
19750 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
19760 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
19770 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
19780 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
19790 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
197a0 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
197b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
197c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
197d0 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
197e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
197f0 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
19800 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
19810 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19820 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19830 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19840 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19850 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19860 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
19870 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
19880 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19890 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
198a0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
198b0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
198c0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
198d0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
198e0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
198f0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19900 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19910 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19920 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
19930 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
19940 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19950 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
19960 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
19970 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19980 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19990 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
199a0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
199b0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
199c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
199d0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
199e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
199f0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19a00 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
19a10 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
19a20 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
19a30 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34  ekGt P1 P2 P3 P4
19a40 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
19a50 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
19a60 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
19a70 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
19a80 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
19a90 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
19aa0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
19ab0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
19ac0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
19ad0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
19ae0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
19af0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
19b00 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
19b10 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
19b20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
19b30 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
19b40 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
19b50 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
19b60 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
19b70 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
19b80 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19b90 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
19ba0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19bb0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19bc0 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
19bd0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
19be0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
19bf0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
19c00 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
19c10 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
19c20 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
19c30 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
19c40 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
19c50 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
19c60 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66  3 P4 * .**.** If
19c70 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19c80 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
19c90 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
19ca0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
19cb0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
19cc0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
19cd0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
19ce0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19cf0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
19d00 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
19d10 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
19d20 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
19d30 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
19d40 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
19d50 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
19d60 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
19d70 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
19d80 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
19d90 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
19da0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19db0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
19dc0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
19dd0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
19de0 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
19df0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
19e00 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
19e10 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
19e20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
19e30 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
19e40 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
19e50 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
19e60 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19e70 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20  SeekLe P1 P2 P3 
19e80 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
19e90 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19ea0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19eb0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19ec0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19ed0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19ee0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19ef0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
19f00 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
19f10 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
19f20 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19f30 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19f40 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19f50 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19f60 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19f70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19f80 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19f90 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19fa0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
19fb0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
19fc0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19fd0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
19fe0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
19ff0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1a000 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1a010 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1a020 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1a030 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1a040 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1a050 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1a060 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1a070 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1a080 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1a090 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1a0a0 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
1a0b0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a0c0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
1a0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1a0e0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1a0f0 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
1a100 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a110 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
1a120 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1a130 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1a140 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1a150 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1a160 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1a170 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1a180 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1a190 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1a1a0 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1a1b0 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1a1c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a1d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1a1e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a1f0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1a200 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1a210 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1a220 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1a230 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1a240 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1a250 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20  sert( OP_SeekLe 
1a260 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29  == OP_SeekLt+1 )
1a270 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1a280 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGe == OP_Seek
1a290 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+2 );.  assert
1a2a0 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f  ( OP_SeekGt == O
1a2b0 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20  P_SeekLt+3 );.  
1a2c0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
1a2d0 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70  =0 ){.    oc = p
1a2e0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20  Op->opcode;.    
1a2f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1a300 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54  .    if( pC->isT
1a310 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  able ){.      /*
1a320 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1a330 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1a340 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1a350 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1a360 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f  ng,.      ** blo
1a370 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1a380 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1a390 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1a3a0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1a3b0 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1a3c0 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1a3d0 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d        pIn3 = &aM
1a3e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1a3f0 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1a400 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
1a410 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69       iKey = sqli
1a420 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1a430 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d  pIn3);.      pC-
1a440 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1a450 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  0;..      /* If 
1a460 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1a470 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1a480 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1a490 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1a4a0 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1a4b0 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1a4c0 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1a4d0 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1a4e0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
1a4f0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1a500 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1a510 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1a520 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1a530 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
1a540 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1a550 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1a560 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1a570 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1a580 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  r,.          ** 
1a590 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1a5a0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1a5b0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1a5c0 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
1a5d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1a5e0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1a5f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
1a600 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
1a610 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74  is point, then t
1a620 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1a630 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20   be a floating. 
1a640 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
1a650 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
1a660 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1a670 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1a680 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20  al)!=0 );..     
1a690 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41     if( iKey==SMA
1a6a0 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28  LLEST_INT64 && (
1a6b0 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1a6c0 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e  iKey || pIn3->r>
1a6d0 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
1a6e0 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  /* The P3 value 
1a6f0 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20  is too large in 
1a700 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
1a710 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
1a720 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
1a730 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
1a740 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
1a750 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1a760 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
1a770 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1a780 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1a790 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1a7a0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1a7b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1a7c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a7d0 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72  eeFirst(pC->pCur
1a7e0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1a7f0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1a800 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1a810 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a820 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1a830 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1a840 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1a850 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65    if( oc<=OP_See
1a860 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kLe ){  assert( 
1a870 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1a880 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1a890 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1a8a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a8b0 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1a8c0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1a8d0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1a8e0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1a8f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a900 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1a910 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
1a920 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73           if( res
1a930 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1a940 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1a950 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1a960 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1a970 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
1a980 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1a990 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  | oc==OP_SeekGe 
1a9a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1a9b0 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28  Use the ceiling(
1a9c0 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1a9d0 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1a9e0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1a9f0 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62   pIn3->r > (doub
1aa00 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b  le)iKey ) iKey++
1aa10 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1aa20 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1aa30 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75  e the floor() fu
1aa40 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1aa50 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1aa60 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1aa70 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc==OP_SeekLe |
1aa80 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1aa90 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1aaa0 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62   pIn3->r < (doub
1aab0 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d  le)iKey ) iKey--
1aac0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1aad0 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20    } .      rc = 
1aae0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1aaf0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1ab00 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1ab10 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1ab20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1ab30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1ab40 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ab50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ab60 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
1ab70 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
1ab80 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1ab90 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43   = 1;.        pC
1aba0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1abb0 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ey;.      }.    
1abc0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69  }else{.      nFi
1abd0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1abe0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1abf0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1ac00 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73  NT32 );.      as
1ac10 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1ac20 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  ;.      r.pKeyIn
1ac30 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1ac40 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1ac50 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1ac60 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  ..      /* The n
1ac70 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1ac80 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1ac90 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1aca0 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66  r:.      **   if
1acb0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1acc0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1acd0 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   ){.      **    
1ace0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1acf0 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1ad00 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1ad10 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1ad20 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a  ags = 0;.      *
1ad30 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20  *   }.      */. 
1ad40 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28       r.flags = (
1ad50 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e  u16)(UNPACKED_IN
1ad60 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63  CRKEY * (1 & (oc
1ad70 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b   - OP_SeekLt)));
1ad80 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1ad90 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c!=OP_SeekGt || 
1ada0 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45  r.flags==UNPACKE
1adb0 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20  D_INCRKEY );.   
1adc0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1add0 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c  P_SeekLe || r.fl
1ade0 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1adf0 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1ae00 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1ae10 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGe || r.flags=
1ae20 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
1ae30 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1ae40 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  t || r.flags==0 
1ae50 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  );..      r.aMem
1ae60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1ae70 5d 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  ];.      ExpandB
1ae80 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1ae90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1aea0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1aeb0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1aec0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1aed0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1aee0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1aef0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1af00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1af10 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
1af20 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1af30 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
1af40 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1af50 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1af60 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1af70 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1af80 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
1af90 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1afa0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
1afb0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1afc0 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1afd0 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1afe0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1aff0 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1b000 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1b010 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a  ==OP_SeekGt) ){.
1b020 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1b030 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1b040 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1b050 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1b060 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1b070 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b080 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1b090 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b0a0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1b0b0 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
1b0c0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1b0d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1b0e0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1b0f0 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1b100 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
1b110 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1b120 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1b130 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1b140 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1b150 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1b160 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1b170 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b180 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1b190 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b1a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1b1b0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1b1c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1b1d0 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
1b1e0 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
1b1f0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
1b200 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
1b210 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  to.        ** se
1b220 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1b230 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a   case..        *
1b240 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  /.        res = 
1b250 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1b260 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1b270 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1b280 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1b290 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  0 );.    if( res
1b2a0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1b2b0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1b2c0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1b2d0 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1b2e0 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
1b2f0 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
1b300 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
1b310 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
1b320 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
1b330 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
1b340 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
1b350 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
1b360 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
1b370 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1b380 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
1b390 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
1b3a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b3b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1b3c0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1b3d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1b3e0 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1b3f0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1b400 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1b410 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1b420 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1b430 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1b440 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1b450 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1b460 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1b470 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1b480 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1b490 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1b4a0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1b4b0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1b4c0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1b4d0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1b4e0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1b4f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1b500 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1b510 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1b520 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1b530 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1b540 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b550 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1b560 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1b570 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1b580 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b590 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1b5a0 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1b5b0 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
1b5c0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1b5d0 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  );.    pC->nullR
1b5e0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32  ow = 0;.    pIn2
1b5f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1b600 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  ];.    pC->movet
1b610 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1b620 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1b630 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  n2);.    pC->row
1b640 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1b650 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1b660 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20  oveto = 1;.  }. 
1b670 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a   break;.}.  ../*
1b680 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
1b690 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b6a0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1b6b0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1b6c0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1b6d0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1b6e0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1b6f0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1b700 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1b710 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1b720 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1b730 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1b740 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1b750 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1b760 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1b770 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1b780 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1b790 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1b7a0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1b7b0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1b7c0 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1b7d0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1b7e0 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1b7f0 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a  ing entry..*/./*
1b800 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1b810 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1b820 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1b830 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1b840 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1b850 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1b860 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1b870 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1b880 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1b890 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1b8a0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1b8b0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1b8c0 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
1b8d0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1b8e0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1b8f0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1b900 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1b910 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
1b920 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1b930 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1b940 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1b950 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
1b960 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
1b970 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
1b980 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
1b990 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
1b9a0 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
1b9b0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1b9c0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1b9d0 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
1b9e0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
1b9f0 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
1ba00 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  y..**.** See als
1ba10 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1ba20 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  sts, IsUnique.*/
1ba30 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1ba40 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1ba50 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1ba60 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1ba70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ba80 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1ba90 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73  ists;.  VdbeCurs
1baa0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
1bab0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
1bac0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
1bad0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1bae0 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1baf0 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1bb00 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1bb10 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33   + sizeof(Mem)*3
1bb20 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
1bb30 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1bb40 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1bb50 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c  ++;.#endif..  al
1bb60 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b  readyExists = 0;
1bb70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bb80 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1bb90 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1bba0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1bbb0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1bbc0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1bbd0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1bbe0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1bbf0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1bc00 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c  p->p3];.  if( AL
1bc10 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1bc20 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73  !=0) ){..    ass
1bc30 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1bc40 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ==0 );.    if( p
1bc50 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
1bc60 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1bc70 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1bc80 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1bc90 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1bca0 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70        r.aMem = p
1bcb0 49 6e 33 3b 0a 20 20 20 20 20 20 72 2e 66 6c 61  In3;.      r.fla
1bcc0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1bcd0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1bce0 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1bcf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1bd00 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1bd10 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1bd20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
1bd30 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  lob(pIn3);.     
1bd40 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1bd50 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1bd60 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1bd70 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1bd80 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  z,.             
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70             aTemp
1bdb0 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1bdc0 70 52 65 63 29 29 3b 0a 20 20 20 20 20 20 69 66  pRec));.      if
1bdd0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a  ( pIdxKey==0 ){.
1bde0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f          goto no_
1bdf0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  mem;.      }.   
1be00 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1be10 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1be20 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1be30 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1be40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1be50 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1be60 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1be70 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1be80 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1be90 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
1bea0 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64  beDeleteUnpacked
1beb0 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b  Record(pIdxKey);
1bec0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1bed0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1bee0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1bef0 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1bf00 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1bf10 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1bf20 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1bf30 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1bf40 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1bf50 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1bf60 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1bf70 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1bf80 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1bf90 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1bfa0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1bfb0 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1bfc0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1bfd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1bfe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1bff0 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1c000 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1c010 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1c020 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20   index b-tree - 
1c030 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20  that is to say, 
1c040 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a  a btree which.**
1c050 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65   no data and whe
1c060 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20 72  re the key are r
1c070 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64  ecords generated
1c080 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1c090 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69  d with.** the li
1c0a0 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74  st field being t
1c0b0 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1c0c0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1c0d0 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  at the index.** 
1c0e0 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e  entry refers to.
1c0f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1c100 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1c110 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1c120 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74  d number. Call t
1c130 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e  his record .** n
1c140 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74 65  umber R. Registe
1c150 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72 73  r P4 is the firs
1c160 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20  t in a set of N 
1c170 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73  contiguous regis
1c180 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b  ters.** that mak
1c190 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64  e up an unpacked
1c1a0 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20   index key that 
1c1b0 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
1c1c0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1c1d0 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61  he value of N ca
1c1e0 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72  n be inferred fr
1c1f0 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e  om the cursor. N
1c200 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f   includes the ro
1c210 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70  wid.** value app
1c220 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  ended to the end
1c230 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72 65   of the index re
1c240 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64  cord. This rowid
1c250 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72   value may.** or
1c260 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20   may not be the 
1c270 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a  same as R..**.**
1c280 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e   If any of the N
1c290 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1c2a0 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73 74  ning with regist
1c2b0 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  er P4 contains a
1c2c0 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20   NULL.** value, 
1c2d0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1c2e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74   to P2..**.** Ot
1c2f0 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e  herwise, this in
1c300 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
1c310 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f   if cursor P1 co
1c320 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a  ntains an entry.
1c330 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69 72  ** where the fir
1c340 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20  st (N-1) fields 
1c350 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72 6f  match but the ro
1c360 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  wid value at the
1c370 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69   end.** of the i
1c380 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f  ndex entry is no
1c390 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69 73  t R. If there is
1c3a0 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1c3b0 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a  control jumps.**
1c3c0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
1c3d0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  P2. Otherwise, t
1c3e0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1c3f0 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1c400 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f  x.** entry is co
1c410 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65 72  pied to register
1c420 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20   P3 and control 
1c430 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1c440 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
1c450 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1c460 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1c470 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
1c480 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
1c490 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
1c4a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1c4b0 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56  */.  u16 ii;.  V
1c4c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c4d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1c4e0 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  r;.  u16 nField;
1c4f0 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55  .  Mem *aMx;.  U
1c500 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c520 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65    /* B-Tree inde
1c530 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a  x search key */.
1c540 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20    i64 R;        
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74       /* Rowid st
1c570 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1c580 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d   P3 */..  pIn3 =
1c590 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1c5a0 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70  .  aMx = &aMem[p
1c5b0 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1c5c0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1c5d0 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1c5e0 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1c5f0 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1c600 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c610 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1c620 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c630 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1c640 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1c650 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c660 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c670 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c680 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1c690 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1c6a0 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1c6b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c6c0 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1c6d0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1c6e0 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1c6f0 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1c700 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1c710 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1c720 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1c730 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1c740 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1c750 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1c760 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1c770 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1c780 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1c790 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1c7a0 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1c7b0 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mx[ii].flags & M
1c7c0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
1c7d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c7e0 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  1;.      pCrsr =
1c7f0 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
1c800 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1c810 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64  ert( (aMx[nField
1c820 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1c830 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  ll)==0 );..  if(
1c840 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
1c850 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65   /* Populate the
1c860 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1c870 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79  y. */.    r.pKey
1c880 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79  Info = pCx->pKey
1c890 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1c8a0 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b  ld = nField + 1;
1c8b0 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
1c8c0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1c8d0 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65  EARCH;.    r.aMe
1c8e0 6d 20 3d 20 61 4d 78 3b 0a 0a 20 20 20 20 2f 2a  m = aMx;..    /*
1c8f0 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61 6c   Extract the val
1c900 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67  ue of R from reg
1c910 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20  ister P3. */.   
1c920 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1c930 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
1c940 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75  .    R = pIn3->u
1c950 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72  .i;..    /* Sear
1c960 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e  ch the B-Tree in
1c970 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c  dex. If no confl
1c980 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73  icting record is
1c990 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20   found, jump.   
1c9a0 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72   ** to P2. Other
1c9b0 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72  wise, copy the r
1c9c0 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66  owid of the conf
1c9d0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74  licting record t
1c9e0 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65  o.    ** registe
1c9f0 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68  r P3 and fall th
1ca00 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1ca10 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
1ca20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
1ca30 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1ca40 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
1ca50 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65  , 0, 0, &pCx->se
1ca60 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69  ekResult);.    i
1ca70 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e  f( (r.flags & UN
1ca80 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
1ca90 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64  ARCH) || r.rowid
1caa0 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20  ==R ){.      pc 
1cab0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1cac0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cad0 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f  pIn3->u.i = r.ro
1cae0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  wid;.    }.  }. 
1caf0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cb00 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
1cb10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1cb20 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65  ** Use the conte
1cb30 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1cb40 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b  3 as a integer k
1cb50 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64  ey.  If a record
1cb60 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b   .** with that k
1cb70 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  ey does not exis
1cb80 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31  t in table of P1
1cb90 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1cba0 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  2. .** If the re
1cbb0 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c  cord does exist,
1cbc0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
1cbd0 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1cbe0 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
1cbf0 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  g to the record 
1cc00 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1cc10 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
1cc20 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  ce between this 
1cc30 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f  operation and No
1cc40 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74  tFound is that t
1cc50 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1cc60 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79   assumes the key
1cc70 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61   is an integer a
1cc80 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20  nd that P1 is a 
1cc90 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a  table whereas.**
1cca0 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65   NotFound assume
1ccb0 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20  s key is a blob 
1ccc0 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
1ccd0 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a   MakeRecord and.
1cce0 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
1ccf0 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  x..**.** See als
1cd00 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1cd10 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  nd, IsUnique.*/.
1cd20 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1cd30 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1cd40 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1cd50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cd60 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1cd70 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1cd80 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1cd90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1cda0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1cdb0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1cdc0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1cdd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1cde0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1cdf0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ce00 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ce10 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ce20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1ce30 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1ce40 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1ce50 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1ce60 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1ce70 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
1ce80 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  0 ){.    res = 0
1ce90 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e  ;.    iKey = pIn
1cea0 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d  3->u.i;.    rc =
1ceb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1cec0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1ced0 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1cee0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1cef0 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1cf00 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1cf10 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1cf20 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1cf30 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1cf40 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1cf50 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1cf60 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1cf70 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1cf80 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
1cf90 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1cfa0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  2 - 1;.      ass
1cfb0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1cfc0 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1cfd0 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  }.    pC->seekRe
1cfe0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65  sult = res;.  }e
1cff0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1d000 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e   happens when an
1d010 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   attempt to open
1d020 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f   a read cursor o
1d030 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71  n the .    ** sq
1d040 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1d050 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
1d060 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20  _EMPTY..    */. 
1d070 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d080 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1d090 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d0a0 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1d0b0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1d0c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d0d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1d0e0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1d0f0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1d100 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1d110 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1d120 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1d130 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1d140 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1d150 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1d160 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1d170 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1d180 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1d190 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1d1a0 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1d1b0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1d1c0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1d1d0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1d1e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1d1f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1d200 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1d210 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1d220 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1d230 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1d240 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d250 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1d260 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1d270 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1d280 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1d290 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1d2a0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1d2b0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1d2c0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1d2d0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1d2e0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1d2f0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1d300 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1d310 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1d320 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1d330 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1d340 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1d350 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1d360 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1d370 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1d380 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1d390 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1d3a0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1d3b0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1d3c0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1d3d0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1d3e0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1d3f0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1d400 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1d410 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1d420 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1d430 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1d440 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1d450 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1d460 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1d470 2a 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20  * a SQLITE_FULL 
1d480 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1d490 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1d4a0 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1d4b0 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1d4c0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1d4d0 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1d4e0 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1d4f0 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1d500 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1d510 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1d520 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1d530 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1d540 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1d550 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1d580 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d590 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1d5a0 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1d5b0 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1d5c0 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1d5d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1d5e0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1d5f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d600 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1d610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d620 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1d630 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1d640 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1d650 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1d660 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1d670 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1d680 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1d690 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1d6a0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1d6b0 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1d6c0 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1d6d0 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1d6e0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1d6f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d700 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d710 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d720 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d730 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d740 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1d750 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1d760 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1d770 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1d780 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1d790 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1d7a0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1d7b0 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1d7c0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1d7d0 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1d7e0 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1d7f0 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1d800 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1d810 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1d820 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1d830 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1d840 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1d850 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1d860 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1d870 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1d880 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1d890 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1d8a0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1d8b0 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1d8c0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1d8d0 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1d8e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1d8f0 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1d900 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1d910 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1d920 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1d930 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1d940 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1d950 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1d960 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1d970 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1d980 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1d990 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1d9a0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1d9b0 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1d9c0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1d9d0 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1d9e0 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1d9f0 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1da00 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1da10 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1da20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1da30 62 6c 65 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d  ble );.    cnt =
1da40 20 30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   0;..#ifdef SQLI
1da50 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
1da60 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1da70 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
1da80 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
1da90 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
1daa0 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
1dab0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
1dac0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1dad0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
1dae0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1daf0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1db00 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
1db10 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
1db20 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
1db30 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
1db40 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
1db50 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
1db60 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
1db70 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1db80 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
1db90 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
1dba0 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
1dbb0 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
1dbc0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
1dbd0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1dbe0 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
1dbf0 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eGetCachedRowid(
1dc00 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1dc10 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a      if( v==0 ){.
1dc20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1dc30 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1dc40 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1dc50 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1dc60 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1dc70 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1dc80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dc90 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1dca0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1dcb0 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20           v = 1; 
1dcc0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
1dcd0 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
1dce0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1dcf0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1dd00 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
1dd10 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Valid(pC->pCurso
1dd20 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r) );.          
1dd30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1dd40 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1dd50 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1dd60 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
1dd70 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
1dd80 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66  /* Cannot fail f
1dd90 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61  ollowing BtreeLa
1dda0 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  st() */.        
1ddb0 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57    if( v==MAX_ROW
1ddc0 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
1ddd0 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
1dde0 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
1ddf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1de00 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
1de10 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
1de20 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  987 */.         
1de30 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1de40 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
1de50 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1de60 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66  CREMENT.      if
1de70 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1de80 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
1de90 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
1dea0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
1deb0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1dec0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
1ded0 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46         if( p->pF
1dee0 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
1def0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
1df00 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
1df10 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
1df20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
1df30 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;.          /* A
1df40 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1df50 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1df60 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1df70 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1df80 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
1df90 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d   );.          pM
1dfa0 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
1dfb0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1dfc0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1dfd0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1dfe0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1dff0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1e000 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1e010 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
1e020 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
1e030 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
1e040 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1e050 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 52 45 47    }..        REG
1e060 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1e070 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
1e080 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1e090 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
1e0a0 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  m);.        asse
1e0b0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
1e0c0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1e0d0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
1e0e0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
1e0f0 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d  /.        if( pM
1e100 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
1e110 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
1e120 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1e130 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1e140 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
1e150 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20  : R-12275-61338 
1e160 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  */.          got
1e170 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e180 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1e190 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d          if( v<pM
1e1a0 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
1e1b0 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
1e1c0 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
1e1d0 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d    }.        pMem
1e1e0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20  ->u.i = v;.     
1e1f0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20   }.#endif..     
1e200 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
1e210 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1e220 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52  pCursor, v<MAX_R
1e230 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b  OWID ? v+1 : 0);
1e240 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
1e250 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1e260 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
1e270 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1e280 20 52 2d 34 38 35 39 38 2d 30 32 39 33 38 20 49   R-48598-02938 I
1e290 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
1e2a0 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
1e2b0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
1e2c0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
1e2d0 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
1e2e0 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
1e2f0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
1e300 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
1e310 61 72 74 73 20 70 69 63 6b 69 6e 67 20 63 61 6e  arts picking can
1e320 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
1e330 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 20 69 74   random until it
1e340 20 66 69 6e 64 73 20 6f 6e 65 0a 20 20 20 20 20   finds one.     
1e350 20 2a 2a 20 74 68 61 74 20 69 73 20 6e 6f 74 20   ** that is not 
1e360 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
1e370 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1e380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
1e390 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
1e3a0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
1e3b0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
1e3c0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
1e3f0 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
1e400 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e  /.      v = db->
1e410 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20  lastRowid;.     
1e420 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
1e430 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
1e440 63 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66  cnt==0 && (v&0xf
1e450 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20  fffff)==v ){.   
1e460 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20         v++;.    
1e470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e480 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1e490 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1e4a0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1e4b0 20 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20    if( cnt<5 ) v 
1e4c0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1e4d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
1e4e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e4f0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1e500 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1e510 75 36 34 29 76 2c 20 30 2c 20 26 72 65 73 29 3b  u64)v, 0, &res);
1e520 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a  .        cnt++;.
1e530 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 63 6e        }while( cn
1e540 74 3c 31 30 30 20 26 26 20 72 63 3d 3d 53 51 4c  t<100 && rc==SQL
1e550 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
1e560 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
1e570 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1e580 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1e590 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1e5a0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
1e5b0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
1e5c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1e5d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e5e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1e5f0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1e600 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64  d = 0;.    pC->d
1e610 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e620 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1e630 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e640 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  TALE;.  }.  pOut
1e650 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
1e660 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e670 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
1e680 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72  3 P4 P5.**.** Wr
1e690 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
1e6a0 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
1e6b0 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
1e6c0 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
1e6d0 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
1e6e0 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
1e6f0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
1e700 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
1e710 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
1e720 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
1e730 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
1e740 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
1e750 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1e760 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1e770 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1e780 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1e790 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
1e7a0 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
1e7b0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1e7c0 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1e7d0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1e7e0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1e7f0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1e800 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1e810 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1e820 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1e830 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1e840 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1e850 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1e860 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1e870 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1e880 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1e890 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1e8a0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1e8b0 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1e8c0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
1e8d0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1e8e0 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
1e8f0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1e900 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
1e910 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
1e920 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
1e930 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
1e940 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1e950 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
1e960 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1e970 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
1e980 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
1e990 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
1e9a0 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
1e9b0 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
1e9c0 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
1e9d0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
1e9e0 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
1e9f0 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
1ea00 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
1ea10 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
1ea20 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
1ea30 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
1ea40 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
1ea50 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
1ea60 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
1ea70 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
1ea80 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
1ea90 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
1eaa0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
1eab0 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
1eac0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
1ead0 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
1eae0 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
1eaf0 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
1eb00 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
1eb10 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
1eb20 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
1eb30 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
1eb40 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
1eb50 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
1eb60 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
1eb70 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
1eb80 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
1eb90 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
1eba0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
1ebb0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1ebc0 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
1ebd0 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
1ebe0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
1ebf0 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
1ec00 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
1ec10 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
1ec20 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
1ec30 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
1ec40 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
1ec50 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
1ec60 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
1ec70 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
1ec80 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
1ec90 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
1eca0 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
1ecb0 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
1ecc0 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
1ecd0 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
1ece0 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
1ecf0 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
1ed00 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
1ed10 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
1ed20 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
1ed30 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
1ed40 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
1ed50 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
1ed60 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
1ed70 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
1ed80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
1ed90 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
1eda0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
1edb0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
1edc0 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
1edd0 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
1ede0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
1edf0 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
1ee00 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
1ee10 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
1ee20 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78  ike OP_Insert ex
1ee30 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65  cept that the ke
1ee40 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  y is the.** inte
1ee50 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f  ger value P3, no
1ee60 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
1ee70 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65  he integer store
1ee80 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1ee90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1eea0 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e  ert: .case OP_In
1eeb0 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d  sertInt: {.  Mem
1eec0 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
1eed0 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
1eee0 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
1eef0 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
1ef00 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
1ef10 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
1ef20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1ef30 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
1ef40 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b  cord */.  i64 iK
1ef50 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ey;         /* T
1ef60 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1ef70 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20   or key for the 
1ef80 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
1ef90 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  erted */.  VdbeC
1efa0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
1efb0 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
1efc0 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
1efd0 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
1efe0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
1eff0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f000 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61   zero-bytes to a
1f010 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ppend */.  int s
1f020 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
1f030 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
1f040 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
1f050 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
1f060 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
1f070 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
1f080 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
1f090 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
1f0a0 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hook */.  const 
1f0b0 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54  char *zTbl; /* T
1f0c0 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  able name - used
1f0d0 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68   by the opdate h
1f0e0 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b  ook */.  int op;
1f0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
1f100 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20  code for update 
1f110 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44  hook: SQLITE_UPD
1f120 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e  ATE or SQLITE_IN
1f130 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61  SERT */..  pData
1f140 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1f150 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
1f160 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1f170 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1f180 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f190 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f1a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f1b0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1f1c0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
1f1d0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1f1e0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
1f1f0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1f200 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
1f210 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
1f220 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
1f230 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
1f240 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
1f250 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
1f260 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
1f270 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
1f280 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 52 45 47  M_Int );.    REG
1f290 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1f2a0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
1f2b0 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
1f2c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
1f2d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1f2e0 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
1f2f0 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
1f300 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
1f310 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1f320 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
1f330 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
1f340 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1f350 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
1f360 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  b->lastRowid = i
1f370 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
1f380 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
1f390 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d  ll ){.    pData-
1f3a0 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74  >z = 0;.    pDat
1f3b0 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  a->n = 0;.  }els
1f3c0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
1f3d0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
1f3e0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
1f3f0 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65   );.  }.  seekRe
1f400 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35  sult = ((pOp->p5
1f410 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
1f420 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
1f430 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a  eekResult : 0);.
1f440 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1f450 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1f460 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61  .    nZero = pDa
1f470 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
1f480 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  else{.    nZero 
1f490 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 0;.  }.  sqlit
1f4a0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1f4b0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1f4c0 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
1f4d0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
1f4e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1f4f0 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
1f520 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1f550 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73  OPFLAG_APPEND, s
1f560 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
1f570 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1f580 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
1f590 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f5a0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1f5b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1f5c0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
1f5d0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
1f5e0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
1f5f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1f600 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
1f610 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1f620 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44  ->p4.z ){.    zD
1f630 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1f640 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1f650 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1f660 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
1f670 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1f680 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1f690 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1f6a0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1f6b0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f6c0 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1f6d0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1f6e0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1f6f0 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1f700 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1f710 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1f720 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f730 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1f740 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1f750 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1f760 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1f770 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1f780 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1f790 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1f7a0 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1f7b0 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1f7c0 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1f7d0 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1f7e0 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1f7f0 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1f800 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1f810 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1f820 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1f830 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1f840 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1f850 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1f860 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1f870 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1f880 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1f890 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f8a0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1f8b0 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1f8c0 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1f8d0 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1f8e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1f8f0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1f900 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1f910 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1f920 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1f930 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1f940 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1f950 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1f960 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f970 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1f980 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1f990 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1f9a0 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1f9b0 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1f9c0 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1f9d0 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1f9e0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1f9f0 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1fa00 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1fa10 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1fa20 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1fa30 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1fa40 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1fa50 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1fa60 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20   {.  i64 iKey;. 
1fa70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1fa80 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20  ..  iKey = 0;.  
1fa90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1faa0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1fab0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1fac0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1fad0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fae0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1faf0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1fb00 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1fb10 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1fb20 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1fb30 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1fb40 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1fb50 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1fb60 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1fb70 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1fb80 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1fb90 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1fba0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1fbb0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1fbc0 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1fbd0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1fbe0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1fbf0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1fc00 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1fc10 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1fc20 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1fc30 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1fc40 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f  tRowid;.  }..  /
1fc50 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20  * The OP_Delete 
1fc60 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f  opcode always fo
1fc70 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45  llows an OP_NotE
1fc80 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74  xists or OP_Last
1fc90 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75   or.  ** OP_Colu
1fca0 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  mn on the same t
1fcb0 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79  able without any
1fcc0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65   intervening ope
1fcd0 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a  rations that.  *
1fce0 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20  * might move or 
1fcf0 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
1fd00 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75  ursor.  Hence cu
1fd10 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79  rsor pC is alway
1fd20 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20  s pointing.  ** 
1fd30 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  to the row to be
1fd40 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
1fd50 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1fd60 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61  orMoveto() opera
1fd70 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20  tion.  ** below 
1fd80 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f  is always a no-o
1fd90 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69  p and cannot fai
1fda0 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20  l.  We will run 
1fdb0 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67  it anyhow, thoug
1fdc0 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64  h,.  ** to guard
1fdd0 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20   against future 
1fde0 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63  changes to the c
1fdf0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20  ode generator.. 
1fe00 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70   **/.  assert( p
1fe10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1fe20 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
1fe30 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1fe40 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
1fe50 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
1fe60 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
1fe70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fe80 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1fe90 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1fea0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1feb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1fec0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
1fed0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
1fee0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1fef0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1ff00 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1ff10 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1ff20 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1ff30 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1ff40 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1ff50 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1ff60 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1ff70 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1ff80 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1ff90 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1ffa0 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1ffb0 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1ffc0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1ffd0 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
1ffe0 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54  _DELETE, zDb, zT
1fff0 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
20000 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
20010 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  0 );.  }.  if( p
20020 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
20030 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
20040 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ange++;.  break;
20050 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
20060 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
20070 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
20080 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
20090 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
200a0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
200b0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
200c0 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
200d0 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
200e0 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
200f0 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
20100 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
20110 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
20120 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
20130 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
20140 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
20150 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
20160 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
20170 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
20180 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
20190 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
201a0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
201b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
201c0 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
201d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
201e0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
201f0 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
20200 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72  ete row data for
20210 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
20220 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
20230 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
20240 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
20250 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
20260 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
20270 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
20280 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
20290 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
202a0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
202b0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
202c0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
202d0 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
202e0 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
202f0 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
20300 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
20310 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  le..*/./* Opcode
20320 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a  : RowKey P1 P2 *
20330 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
20340 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
20350 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
20360 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
20370 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
20380 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
20390 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
203a0 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
203b0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
203c0 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61   P3 register exa
203d0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
203e0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
203f0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
20400 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
20410 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
20420 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
20430 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
20440 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
20450 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
20460 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
20470 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
20480 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
20490 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
204a0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
204b0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
204c0 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
204d0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
204e0 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  ->p2];..  /* Not
204f0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
20500 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
20510 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
20520 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
20530 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
20540 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
20550 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20560 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20570 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20580 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20590 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
205a0 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a  e==OP_RowKey );.
205b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
205c0 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Index || pOp->op
205d0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
205e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
205f0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
20600 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20   pC->nullRow==0 
20610 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20620 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
20630 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20640 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
20650 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
20660 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
20670 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
20680 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
20690 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  sr) );..  /* The
206a0 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
206b0 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
206c0 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
206d0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
206e0 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
206f0 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
20700 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
20710 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
20720 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
20730 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
20740 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77  Hence the follow
20750 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43  ing sqlite3VdbeC
20760 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
20770 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a  ll is always.  *
20780 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61  * a no-op and ca
20790 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42  n never fail.  B
207a0 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69  ut we leave it i
207b0 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66  n place as a saf
207c0 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ety..  */.  asse
207d0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
207e0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
207f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
20800 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
20810 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
20820 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
20830 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20840 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43  error;..  if( pC
20850 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
20860 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
20870 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 72 63 20  Table );.    rc 
20880 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
20890 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
208a0 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  4);.    assert( 
208b0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
208c0 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61      /* True beca
208d0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
208e0 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
208f0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e   */.    if( n64>
20900 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
20910 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
20920 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
20930 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
20940 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
20950 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
20960 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
20970 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29  aSize(pCrsr, &n)
20980 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
20990 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
209a0 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
209b0 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
209c0 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62     if( n>(u32)db
209d0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
209e0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
209f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
20a00 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
20a10 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
20a20 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c  MemGrow(pOut, n,
20a30 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
20a40 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
20a50 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
20a60 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
20a70 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
20a80 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
20a90 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
20aa0 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
20ab0 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
20ac0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
20ad0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20ae0 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
20af0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
20b00 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
20b10 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
20b20 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
20b30 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
20b40 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
20b50 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
20b60 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
20b70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
20b80 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
20b90 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
20ba0 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
20bb0 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
20bc0 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
20bd0 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
20be0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
20bf0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
20c00 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
20c10 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
20c20 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
20c30 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
20c40 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
20c50 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
20c60 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
20c70 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
20c80 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
20c90 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
20ca0 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
20cb0 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
20cc0 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
20cf0 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  se */.  VdbeCurs
20d00 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b  or *pC;.  i64 v;
20d10 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
20d20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
20d30 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
20d40 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
20d50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20d60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20d70 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
20d80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20d90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
20da0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20db0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
20dc0 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43  g==0 );.  if( pC
20dd0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
20de0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
20df0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
20e00 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
20e10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
20e20 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
20e30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
20e40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20e50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
20e60 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
20e70 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a  >pVtabCursor ){.
20e80 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
20e90 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
20ea0 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
20eb0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
20ec0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
20ed0 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
20ee0 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
20ef0 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56  e->xRowid(pC->pV
20f00 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  tabCursor, &v);.
20f10 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
20f20 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
20f30 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
20f40 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
20f50 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
20f60 45 72 72 4d 73 67 20 3d 20 30 3b 0a 23 65 6e 64  ErrMsg = 0;.#end
20f70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
20f80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
20f90 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
20fa0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
20fb0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
20fc0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
20fd0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
20fe0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
20ff0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21000 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
21010 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
21020 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
21030 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
21040 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
21050 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
21060 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
21070 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
21080 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
21090 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
210a0 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
210b0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
210c0 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
210d0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
210e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
210f0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
21100 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
21110 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
21120 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
21130 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
21140 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
21150 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
21160 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
21170 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
21180 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
21190 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
211a0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
211b0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
211c0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
211d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
211e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
211f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21200 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21210 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21220 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
21230 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
21240 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28  Valid = 0;.  if(
21250 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
21260 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
21270 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
21280 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
21290 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
212a0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
212b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
212c0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
212d0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
212e0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
212f0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
21300 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
21310 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
21320 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
21330 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
21340 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
21350 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
21360 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
21370 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21380 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
21390 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
213a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
213b0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
213c0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
213d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
213e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
213f0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
21400 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
21410 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21420 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21430 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
21440 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21450 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21460 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
21470 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21480 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21490 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
214a0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
214b0 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
214c0 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20  {.    res = 1;. 
214d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
214e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
214f0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
21500 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
21510 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
21520 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21530 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
21540 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
21550 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21560 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21570 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
21580 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  && res ){.    pc
21590 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
215a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
215b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
215c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
215d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
215e0 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
215f0 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
21600 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
21610 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
21620 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
21630 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
21640 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
21650 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
21660 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
21670 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
21680 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
21690 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
216a0 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
216b0 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
216c0 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
216d0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
216e0 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
216f0 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
21700 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
21710 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
21720 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
21730 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
21740 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
21750 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
21760 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
21770 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
21780 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
21790 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
217a0 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
217b0 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
217c0 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
217d0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
217e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
217f0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
21800 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
21810 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
21820 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
21830 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
21840 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
21850 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31  TMTSTATUS_SORT-1
21860 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
21870 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
21880 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
21890 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
218a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
218b0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
218c0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
218d0 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
218e0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
218f0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
21900 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
21910 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
21920 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
21930 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
21940 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
21950 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
21960 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21970 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
21980 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
21990 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
219a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
219b0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
219c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
219d0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
219e0 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
219f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
21a00 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21a10 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
21a20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
21a30 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
21a40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21a50 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21a60 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21a70 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21a80 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21a90 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43   if( (pCrsr = pC
21aa0 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
21ab0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21ac0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
21ad0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
21ae0 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d  ->atFirst = res=
21af0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
21b00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21b10 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
21b20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21b30 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
21b40 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21b50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
21b60 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  es = 1;.  }.  pC
21b70 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21b80 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
21b90 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
21ba0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
21bb0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
21bc0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
21bd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21be0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
21bf0 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
21c00 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
21c10 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
21c20 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
21c30 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
21c40 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
21c50 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
21c60 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
21c70 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
21c80 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
21c90 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
21ca0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
21cb0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
21cc0 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
21cd0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
21ce0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
21cf0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
21d00 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
21d10 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
21d20 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
21d30 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
21d40 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
21d50 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
21d60 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
21d70 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
21d80 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
21d90 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
21da0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
21db0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
21dc0 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
21dd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
21de0 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
21df0 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
21e00 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
21e10 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
21e20 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
21e30 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
21e40 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
21e50 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
21e60 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
21e70 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
21e80 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
21e90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
21ea0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
21eb0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
21ec0 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
21ed0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
21ee0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
21ef0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
21f00 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
21f10 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
21f20 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
21f30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
21f40 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
21f50 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
21f60 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
21f70 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
21f80 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
21f90 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
21fa0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
21fb0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
21fc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
21fd0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
21fe0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21ff0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22000 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22010 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
22020 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
22030 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
22040 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22050 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22060 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
22070 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72  rt( pOp->p5<=Arr
22080 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
22090 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
220a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
220b0 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a  .  if( pC==0 ){.
220c0 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53      break;  /* S
220d0 65 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20  ee ticket #2273 
220e0 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d  */.  }.  pCrsr =
220f0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22100 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
22110 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
22120 3d 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  = 1;.    break;.
22130 20 20 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20    }.  res = 1;. 
22140 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22150 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22160 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  rc = pOp->op
22170 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20  code==OP_Next ? 
22180 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
22190 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a  (pCrsr, &res) :.
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
221c0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
221d0 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  us(pCrsr, &res);
221e0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
221f0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
22200 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22210 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22220 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70   res==0 ){.    p
22230 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
22240 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
22250 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70   ) p->aCounter[p
22260 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66  Op->p5-1]++;.#if
22270 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
22280 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
22290 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
222a0 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77  if.  }.  pC->row
222b0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
222c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
222d0 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
222e0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
222f0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
22300 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65  holds a SQL inde
22310 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
22320 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
22330 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
22340 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
22350 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
22360 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
22370 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
22380 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
22390 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
223a0 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
223b0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
223c0 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
223d0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
223e0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
223f0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
22400 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
22410 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
22420 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
22430 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
22440 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
22450 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
22460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
22470 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
22480 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
22490 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
224a0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
224b0 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
224c0 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
224d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
224e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
224f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22500 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22510 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22520 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
22530 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
22540 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
22550 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
22560 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
22570 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
22580 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
22590 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73  sr!=0) ){.    as
225a0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
225b0 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
225c0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
225d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
225e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
225f0 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
22600 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
22610 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
22620 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
22630 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
22640 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
22650 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
22660 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
22670 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
22680 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
22690 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
226a0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
226b0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
226c0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
226d0 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
226e0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
226f0 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
22700 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22710 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
22720 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
22730 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
22740 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
22750 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
22760 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
22770 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
22780 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
22790 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
227a0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
227b0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
227c0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
227d0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
227e0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
227f0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22800 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
22810 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
22820 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
22830 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
22840 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22850 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
22860 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p3<=p->nMem+
22870 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
22880 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22890 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
228a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
228b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
228c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
228d0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
228e0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
228f0 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
22900 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
22910 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
22920 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
22930 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  u16)pOp->p3;.   
22940 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
22950 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
22960 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72  [pOp->p2];.    r
22970 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22980 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22990 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
229a0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
229b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
229c0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
229d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
229e0 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
229f0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
22a00 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
22a10 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
22a20 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22a30 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22a40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22a50 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
22a60 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
22a70 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22a80 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
22a90 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
22aa0 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
22ab0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
22ac0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
22ad0 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
22ae0 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
22af0 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
22b00 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
22b10 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
22b20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
22b30 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
22b40 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
22b50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
22b60 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
22b70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
22b80 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
22b90 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
22ba0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43  release */.  BtC
22bb0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
22bc0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22bd0 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
22be0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22bf0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22c00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22c10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22c20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22c30 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
22c40 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
22c50 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
22c60 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
22c70 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
22c80 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
22c90 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
22ca0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
22cb0 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f  ( NEVER(rc) ) go
22cc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22cd0 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  error;.    asser
22ce0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
22cf0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
22d00 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22d10 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66  ble==0 );.    if
22d20 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
22d30 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
22d40 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
22d50 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77  (db, pCrsr, &row
22d60 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  id);.      if( r
22d70 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
22d80 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
22d90 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22da0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
22db0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
22dc0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
22dd0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
22de0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
22df0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22e00 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
22e10 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  4 P5.**.** The P
22e20 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
22e30 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
22e40 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
22e50 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
22e60 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
22e70 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
22e80 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
22e90 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
22ea0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
22eb0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
22ec0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
22ed0 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
22ee0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
22ef0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
22f00 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
22f10 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
22f20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
22f30 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
22f40 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
22f50 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
22f60 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
22f70 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
22f80 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
22f90 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
22fa0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
22fb0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
22fc0 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
22fd0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
22fe0 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
22ff0 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
23000 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
23010 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
23020 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
23030 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
23040 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
23050 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
23060 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
23070 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
23080 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
23090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
230a0 54 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  T P1 P2 P3 * P5.
230b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
230c0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
230d0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
230e0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
230f0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
23100 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
23110 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
23120 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
23130 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
23140 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
23150 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
23160 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
23170 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
23180 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
23190 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
231a0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
231b0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
231c0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
231d0 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
231e0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
231f0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
23200 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
23210 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
23220 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
23230 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
23240 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
23250 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
23260 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
23270 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
23280 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
23290 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
232a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
232b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
232c0 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  E: {        /* j
232d0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
232e0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
232f0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
23300 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
23310 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23320 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23330 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23340 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23350 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23360 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
23370 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29  (pC->pCursor!=0)
23380 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23390 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
233a0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
233b0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
233c0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
233d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
233e0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
233f0 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  32 );.    r.pKey
23400 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
23410 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
23420 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
23430 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  .i;.    if( pOp-
23440 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66  >p5 ){.      r.f
23450 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
23460 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b  INCRKEY | UNPACK
23470 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
23480 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
23490 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
234a0 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
234b0 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61  D;.    }.    r.a
234c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
234d0 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p3];.    rc = s
234e0 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
234f0 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
23500 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
23510 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
23520 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
23530 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
23540 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
23550 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23560 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
23570 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
23580 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
23590 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
235a0 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
235b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
235c0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
235d0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
235e0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
235f0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
23600 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
23610 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
23620 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
23630 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
23640 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
23650 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
23660 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
23670 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23680 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
23690 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
236a0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
236b0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
236c0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
236d0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
236e0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
236f0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
23700 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
23710 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
23720 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
23730 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
23740 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
23750 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
23760 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
23770 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
23780 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
23790 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
237a0 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
237b0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
237c0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
237d0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
237e0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
237f0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
23800 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
23810 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
23820 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
23830 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
23840 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
23850 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
23860 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
23870 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
23880 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
23890 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
238a0 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
238b0 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
238c0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
238d0 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
238e0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
238f0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
23900 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
23910 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
23920 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
23930 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
23940 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
23950 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
23960 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
23970 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
23980 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
23990 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64    int iCnt;.  Vd
239a0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74  be *pVdbe;.  int
239b0 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51   iDb;.#ifndef SQ
239c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
239d0 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
239e0 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
239f0 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
23a00 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
23a10 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
23a20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
23a30 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
23a40 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
23a50 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
23a60 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  pc>=0 ){.      i
23a70 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
23a80 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
23a90 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
23aa0 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74  t;.#endif.  pOut
23ab0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
23ac0 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  ll;.  if( iCnt>1
23ad0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
23ae0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
23af0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
23b00 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
23b10 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
23b20 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
23b30 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
23b40 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
23b50 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
23b60 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  b))!=0 );.    rc
23b70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
23b80 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
23b90 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
23ba0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
23bb0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
23bc0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
23bd0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
23be0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23bf0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
23c00 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
23c10 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
23c20 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
23c30 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
23c40 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20  (&db->aDb[iDb], 
23c50 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
23c60 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
23c70 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 31 3b 0a  emaOnFault = 1;.
23c80 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
23c90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23ca0 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
23cb0 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
23cc0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
23cd0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
23ce0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
23cf0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
23d00 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
23d10 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
23d20 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
23d30 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
23d40 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
23d50 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23d60 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
23d70 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
23d80 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
23d90 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
23da0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23db0 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
23dc0 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
23dd0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
23de0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
23df0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
23e00 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
23e10 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
23e20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
23e30 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
23e40 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
23e50 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
23e60 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
23e70 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
23e80 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
23e90 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
23ea0 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
23eb0 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
23ec0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
23ed0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
23ee0 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
23ef0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
23f00 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
23f10 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
23f20 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
23f30 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
23f40 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
23f50 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
23f60 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
23f70 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
23f80 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
23f90 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
23fa0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
23fb0 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
23fc0 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
23fd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
23fe0 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
23ff0 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
24000 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   0;.  assert( (p
24010 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
24020 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29  <<pOp->p2))!=0 )
24030 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
24040 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
24050 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
24060 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
24070 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
24080 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
24090 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
240a0 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
240b0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
240c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
240d0 30 20 29 7b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  0 ){.      aMem[
240e0 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
240f0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
24100 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24110 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
24120 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
24130 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
24140 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
24150 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24160 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
24170 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
24180 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
24190 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
241a0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
241b0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
241c0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
241d0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
241e0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
241f0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
24200 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
24210 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
24220 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
24230 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
24240 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
24250 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
24260 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
24270 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
24280 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
24290 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
242a0 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
242b0 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
242c0 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
242d0 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
242e0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
242f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
24300 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
24310 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
24320 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24330 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
24340 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
24350 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
24360 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
24370 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
24380 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
24390 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
243a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
243b0 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
243c0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
243d0 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
243e0 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
243f0 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
24400 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
24410 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
24420 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
24430 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24440 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
24450 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
24460 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
24470 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24480 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
24490 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
244a0 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
244b0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
244c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
244d0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
244e0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
244f0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
24500 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
24510 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
24520 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24530 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
24540 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
24550 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
24560 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
24570 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
24580 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
24590 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54   = BTREE_LEAFDAT
245a0 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  A|BTREE_INTKEY;.
245b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
245c0 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44  gs = BTREE_ZEROD
245d0 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  ATA;.  }.  rc = 
245e0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
245f0 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
24600 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
24610 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
24620 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
24630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
24640 65 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20  eSchema P1 P2 * 
24650 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
24660 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
24670 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
24680 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
24690 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
246a0 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
246b0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
246c0 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20   P4.  P2 is the 
246d0 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20  "force" flag.   
246e0 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65  Always do.** the
246f0 20 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69   parsing if P2 i
24700 73 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69  s true.  If P2 i
24710 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68  s false, then th
24720 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a  is routine is a.
24730 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20  ** no-op if the 
24740 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75  schema is not cu
24750 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20  rrently loaded. 
24760 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24770 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c   if P2.** is fal
24780 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  se, the SQLITE_M
24790 41 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f  ASTER table is o
247a0 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68  nly parsed if th
247b0 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a  e rest of the.**
247c0 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61   schema is alrea
247d0 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74  dy loaded into t
247e0 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e  he symbol table.
247f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24800 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
24810 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
24820 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
24830 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
24840 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
24850 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
24860 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
24870 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
24880 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
24890 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
248a0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
248b0 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
248c0 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
248d0 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
248e0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
248f0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
24900 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
24910 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e  ;..  /* If pOp->
24920 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68  p2 is 0, then th
24930 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69  is opcode is bei
24940 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72  ng executed to r
24950 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ead a.  ** singl
24960 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70  e row, for examp
24970 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65  le the row corre
24980 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65  sponding to a ne
24990 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65  w index.  ** cre
249a0 61 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42  ated by this VDB
249b0 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69  E, from the sqli
249c0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
249d0 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f   It only.  ** do
249e0 65 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63  es this if the c
249f0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d  orresponding in-
24a00 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73  memory schema is
24a10 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20   currently.  ** 
24a20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73  loaded. Otherwis
24a30 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78  e, the new index
24a40 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20   definition can 
24a50 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a  be loaded along.
24a60 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65    ** with the re
24a70 73 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  st of the schema
24a80 20 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75   when it is requ
24a90 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ired..  **.  ** 
24aa0 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74  Although the mut
24ab0 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72  ex on the BtShar
24ac0 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  ed object that c
24ad0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20  orresponds to.  
24ae0 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20  ** database iDb 
24af0 28 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  (the database co
24b00 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c  ntaining the sql
24b10 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
24b20 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68  .  ** read by th
24b30 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20  is instruction) 
24b40 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c  is currently hel
24b50 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  d, it is necessa
24b60 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69  ry to.  ** obtai
24b70 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  n the mutexes on
24b80 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
24b90 74 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63  tabases before c
24ba0 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20  hecking if.  ** 
24bb0 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44  the schema of iD
24bc0 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69  b is loaded. Thi
24bd0 73 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74  s is because, at
24be0 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20   the start of.  
24bf0 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ** the sqlite3_e
24c00 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77  xec() call below
24c10 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e  , SQLite will in
24c20 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74  voke .  ** sqlit
24c30 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
24c40 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65  ). If all mutexe
24c50 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64  s are not alread
24c60 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a  y held, the.  **
24c70 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62   iDb mutex may b
24c80 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65  e temporarily re
24c90 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20  leased to avoid 
24ca0 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20  deadlock. If .  
24cb0 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c  ** this happens,
24cc0 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72   then some other
24cd0 20 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65   thread may dele
24ce0 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  te the in-memory
24cf0 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66   .  ** schema of
24d00 20 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65   database iDb be
24d10 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61  fore the SQL sta
24d20 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65  tement runs. The
24d30 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c   schema.  ** wil
24d40 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65  l not be reloade
24d50 64 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62  d becuase the db
24d60 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67  ->init.busy flag
24d70 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20   is set. This.  
24d80 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e  ** can result in
24d90 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c   a "no such tabl
24da0 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e: sqlite_master
24db0 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a  " or "malformed.
24dc0 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63    ** database sc
24dd0 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e  hema" error bein
24de0 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  g returned to th
24df0 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61  e user..  */.  a
24e00 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
24e10 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
24e20 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
24e30 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
24e40 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20  eEnterAll(db);. 
24e50 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20   if( pOp->p2 || 
24e60 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
24e70 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
24e80 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a  Loaded) ){.    z
24e90 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
24ea0 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
24eb0 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
24ec0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
24ed0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
24ee0 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
24ef0 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
24f00 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
24f10 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
24f20 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
24f30 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
24f40 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
24f50 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
24f60 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
24f70 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
24f80 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
24f90 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
24fa0 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
24fb0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
24fc0 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
24fd0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
24fe0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
24ff0 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
25000 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
25010 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
25020 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
25030 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
25040 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
25050 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
25060 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
25070 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
25080 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
25090 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
250a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
250b0 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
250c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
250d0 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
250e0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
250f0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
25100 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
25110 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20  eLeaveAll(db);. 
25120 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25130 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
25140 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
25150 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
25160 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25170 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
25180 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
25190 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
251a0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
251b0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
251c0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
251d0 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
251e0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
251f0 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
25200 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
25210 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
25220 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
25230 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
25240 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
25250 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
25260 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
25270 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
25280 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
25290 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
252a0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
252b0 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
252c0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
252d0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
252e0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
252f0 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
25300 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
25310 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
25320 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
25330 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
25340 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
25350 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
25360 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
25370 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
25380 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
25390 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
253a0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
253b0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
253c0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
253d0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
253e0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
253f0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
25400 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
25410 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
25420 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
25430 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
25440 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
25450 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
25460 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
25470 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
25480 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25490 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
254a0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
254b0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
254c0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
254d0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
254e0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
254f0 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
25500 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
25510 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
25520 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
25530 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
25540 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25550 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
25560 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
25570 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
25580 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
25590 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
255a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
255b0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
255c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
255d0 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
255e0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
255f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25600 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
25610 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
25620 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
25630 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
25640 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
25650 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
25660 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
25670 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
25680 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
25690 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
256a0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
256b0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
256c0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
256d0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
256e0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
256f0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
25700 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
25710 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
25720 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
25730 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
25740 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
25750 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
25760 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
25770 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
25780 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
25790 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
257a0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
257b0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
257c0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
257d0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
257e0 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
257f0 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
25800 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
25810 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
25820 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
25830 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
25840 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
25850 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
25860 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
25870 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
25880 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
25890 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
258a0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
258b0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
258c0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
258d0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
258e0 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
258f0 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
25900 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
25910 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
25920 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
25930 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
25940 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
25950 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
25960 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
25970 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
25980 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
25990 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
259a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
259b0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
259c0 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
259d0 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
259e0 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
259f0 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
25a00 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
25a10 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
25a20 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
25a30 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
25a40 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
25a50 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
25a60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
25a70 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
25a80 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
25a90 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
25aa0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
25ab0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
25ac0 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
25ad0 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
25ae0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25af0 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
25b00 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
25b10 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
25b20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
25b30 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
25b40 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
25b50 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
25b60 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
25b70 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
25b80 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
25b90 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
25ba0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
25bb0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
25bc0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
25bd0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
25be0 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
25bf0 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
25c00 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
25c10 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
25c20 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
25c30 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20  g */.  .  nRoot 
25c40 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
25c50 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
25c60 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
25c70 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
25c80 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
25c90 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
25ca0 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
25cb0 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
25cc0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
25cd0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
25ce0 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
25cf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
25d00 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
25d10 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
25d20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25d30 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
25d40 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
25d50 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
25d60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
25d70 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  ];.  for(j=0; j<
25d80 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20  nRoot; j++){.   
25d90 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74   aRoot[j] = (int
25da0 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  )sqlite3VdbeIntV
25db0 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a  alue(&pIn1[j]);.
25dc0 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d    }.  aRoot[j] =
25dd0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
25de0 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
25df0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
25e00 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
25e10 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
25e20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
25e30 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
25e40 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
25e50 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
25e60 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e80 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
25e90 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
25ea0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
25eb0 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
25ec0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
25ed0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
25ee0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
25ef0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
25f00 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
25f10 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
25f20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
25f30 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
25f40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
25f50 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
25f60 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
25f70 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
25f80 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
25f90 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
25fa0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
25fb0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
25fc0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
25fd0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
25fe0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
25ff0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
26000 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
26010 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
26020 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
26030 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
26040 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
26050 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
26060 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
26070 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
26080 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
26090 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
260a0 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
260b0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
260c0 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
260d0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
260e0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
260f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
26100 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
26110 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
26120 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
26130 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
26140 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
26150 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
26160 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
26170 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
26180 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
26190 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
261a0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
261b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
261c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
261d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
261e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
261f0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
26200 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
26210 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
26220 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
26230 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
26240 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
26250 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
26260 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
26270 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
26280 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
26290 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
262a0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
262b0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
262c0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
262d0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
262e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
262f0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
26300 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
26310 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
26320 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  al;.  CHECK_FOR_
26330 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e  INTERRUPT;.  pIn
26340 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
26350 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
26360 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26370 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
26380 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
26390 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
263a0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
263b0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
263c0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
263d0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
263e0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
263f0 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
26400 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
26410 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
26420 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
26430 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
26440 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
26450 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
26460 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
26470 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26480 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26490 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
264a0 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
264b0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
264c0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
264d0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
264e0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
264f0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
26500 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
26510 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
26520 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
26530 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
26540 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
26550 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
26560 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
26570 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
26580 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
26590 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
265a0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
265b0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
265c0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
265d0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
265e0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
265f0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
26600 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
26610 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
26620 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
26630 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
26640 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
26650 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
26660 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
26670 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
26680 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
26690 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
266a0 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
266b0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
266c0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
266d0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
266e0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
266f0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
26700 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
26710 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
26720 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
26730 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
26740 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
26750 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
26760 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
26770 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
26780 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
26790 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
267a0 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
267b0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
267c0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
267d0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
267e0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
267f0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
26800 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
26810 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
26820 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
26830 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
26840 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
26850 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
26860 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
26870 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
26880 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
26890 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
268a0 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
268b0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
268c0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
268d0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
268e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
268f0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26910 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
26920 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
26930 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
26940 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
26950 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
26960 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
26970 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
26980 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
26990 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
269a0 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
269b0 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
269c0 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
269d0 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
269e0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
269f0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
26a00 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
26a10 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
26a20 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
26a30 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
26a40 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
26a50 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
26a60 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
26a70 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
26a80 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
26a90 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
26aa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
26ab0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
26ac0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
26ad0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
26ae0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
26af0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
26b00 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
26b10 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
26b20 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
26b30 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b50 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
26b60 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
26b70 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
26ba0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
26bb0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
26bc0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
26bd0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
26be0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
26bf0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
26c00 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
26c10 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
26c20 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
26c30 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
26c40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
26c50 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
26c60 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
26c70 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78  P3 P4 *.**.** Ex
26c80 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
26c90 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
26ca0 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
26cb0 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
26cc0 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
26cd0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
26ce0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
26cf0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
26d00 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
26d10 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
26d20 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
26d30 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
26d40 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
26d50 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
26d60 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
26d70 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
26d80 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
26d90 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
26da0 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
26db0 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
26dc0 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
26dd0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
26de0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
26df0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
26e00 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
26e10 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
26e20 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
26e30 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
26e40 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
26e50 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
26e60 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
26e70 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
26e80 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
26e90 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
26ea0 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  m..*/.case OP_Pr
26eb0 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
26ec0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
26ed0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
26ee0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
26ef0 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
26f00 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
26f10 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
26f20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
26f30 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
26f40 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
26f50 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
26f60 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
26f70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26f80 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
26f90 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
26fa0 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
26fb0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
26fc0 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
26fd0 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
26fe0 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
26ff0 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
27000 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
27010 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
27020 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
27030 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
27040 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
27050 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
27060 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
27070 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
27080 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
27090 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
270a0 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
270b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
270c0 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
270d0 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
270e0 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
270f0 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
27100 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
27110 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
27120 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
27130 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
27140 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
27150 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
27160 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
27170 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
27180 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
27190 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
271a0 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
271b0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
271c0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
271d0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
271e0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
271f0 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
27200 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
27210 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
27220 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
27230 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
27240 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
27250 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
27260 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
27270 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
27280 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
27290 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
272a0 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
272b0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
272c0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
272d0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
272e0 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
272f0 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
27300 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
27310 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
27320 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
27330 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
27340 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
27350 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
27360 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
27370 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
27380 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
27390 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
273a0 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
273b0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
273c0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
273d0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
273e0 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
273f0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
27400 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
27410 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
27420 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
27430 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
27440 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
27450 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
27460 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
27470 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
27480 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
27490 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
274a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
274b0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
274c0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
274d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
274e0 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
274f0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
27500 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
27510 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
27520 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
27530 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
27540 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
27550 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
27560 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
27570 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
27580 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
27590 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
275a0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
275b0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
275c0 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
275d0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
275e0 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
275f0 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
27600 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
27610 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
27620 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
27630 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
27640 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
27650 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
27660 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
27670 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
27680 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
27690 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
276a0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
276b0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
276c0 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
276d0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
276e0 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
276f0 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
27700 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
27710 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
27720 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
27730 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
27740 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
27750 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
27760 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
27770 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
27780 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
27790 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
277a0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
277b0 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
277c0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
277d0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
277e0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
277f0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
27800 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
27810 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
27820 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20  eCursor *);.    
27830 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
27840 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
27850 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
27860 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
27870 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
27880 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27890 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
278a0 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
278b0 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
278c0 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
278d0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
278e0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
278f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
27900 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
27910 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
27920 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
27930 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
27940 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
27950 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
27960 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
27970 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
27980 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
27990 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
279a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
279b0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
279c0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
279d0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
279e0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
279f0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
27a00 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
27a10 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20  gram->token;..  
27a20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
27a30 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
27a40 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
27a50 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
27a60 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
27a70 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
27a80 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
27a90 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
27aa0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
27ab0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
27ac0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
27ad0 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
27ae0 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
27af0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
27b00 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
27b10 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
27b20 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
27b30 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
27b40 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
27b50 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
27b60 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
27b70 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
27b80 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
27b90 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
27ba0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
27bb0 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
27bc0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
27bd0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
27be0 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
27bf0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
27c00 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
27c10 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
27c20 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65  m = aMem = &Vdbe
27c30 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
27c40 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  [-1];.  p->nMem 
27c50 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
27c60 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
27c70 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
27c80 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
27c90 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
27ca0 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
27cb0 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
27cc0 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
27cd0 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
27ce0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
27cf0 4f 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a  Op;.  pc = -1;..
27d00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27d10 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
27d20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
27d30 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
27d40 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
27d50 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
27d60 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
27d70 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
27d80 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
27d90 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
27da0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
27db0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
27dc0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
27dd0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
27de0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
27df0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
27e00 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
27e10 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
27e20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
27e30 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
27e40 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
27e50 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
27e60 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
27e70 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
27e80 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
27e90 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
27ea0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
27eb0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
27ec0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
27ed0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
27ee0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
27ef0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
27f00 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
27f10 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
27f20 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
27f30 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
27f40 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
27f50 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
27f60 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
27f70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
27f80 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
27f90 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
27fa0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
27fb0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
27fc0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
27fd0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
27fe0 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
27ff0 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
28000 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
28010 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
28020 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28030 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
28040 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
28050 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
28060 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  * *.**.** Increm
28070 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
28080 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
28090 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
280a0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
280b0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
280c0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
280d0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
280e0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
280f0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
28100 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
28110 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
28120 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
28130 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
28140 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
28150 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
28160 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
28170 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
28180 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
28190 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
281a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
281b0 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
281c0 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
281d0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
281e0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
281f0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
28200 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28210 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
28220 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28230 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
28240 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
28250 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
28260 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
28270 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
28280 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
28290 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
282a0 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
282b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
282c0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
282d0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
282e0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
282f0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
28300 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
28310 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
28320 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
28330 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
28340 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
28350 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
28360 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
28370 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
28380 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
28390 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
283a0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
283b0 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
283c0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
283d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
283e0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
283f0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
28400 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28410 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
28420 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
28430 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
28440 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
28450 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
28460 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
28470 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70  aint==0 ) pc = p
28480 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
28490 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
284a0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
284b0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
284c0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
284d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
284e0 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
284f0 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
28500 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
28510 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
28520 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
28530 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
28540 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
28550 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
28560 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
28570 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
28580 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
28590 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
285a0 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
285b0 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
285c0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
285d0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
285e0 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
285f0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
28600 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
28610 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
28620 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
28630 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
28640 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
28650 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
28660 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
28670 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
28680 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
28690 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  2 */.  Mem *pIn1
286a0 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  ;.  VdbeFrame *p
286b0 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
286c0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
286d0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
286e0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
286f0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
28700 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
28710 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
28720 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
28730 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
28740 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28750 70 31 5d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  p1];.  }.  sqlit
28760 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
28770 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
28780 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
28790 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
287a0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
287b0 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
287c0 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
287d0 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
287e0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
287f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
28800 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28810 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
28820 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
28830 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
28840 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
28850 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
28860 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
28870 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
28880 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
28890 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
288a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
288b0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
288c0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
288d0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
288e0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
288f0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
28900 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
28910 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
28920 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
28930 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
28940 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
28950 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
28960 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
28970 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
28980 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
28990 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
289a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
289b0 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
289c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
289d0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
289e0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
289f0 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
28a00 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
28a10 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
28a20 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
28a30 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
28a40 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
28a50 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
28a60 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
28a70 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
28a80 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
28a90 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
28aa0 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
28ab0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
28ac0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
28ad0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28ae0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
28af0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
28b00 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
28b10 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
28b20 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
28b30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28b40 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
28b50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
28b60 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
28b70 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
28b80 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
28b90 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76  l P3 to the.** v
28ba0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
28bb0 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73   P1.  If the res
28bc0 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30  ult is exactly 0
28bd0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
28be0 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
28bf0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
28c00 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
28c10 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
28c20 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
28c30 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
28c40 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
28c50 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
28c60 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
28c70 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
28c80 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
28c90 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
28ca0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
28cb0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
28cc0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
28cd0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
28ce0 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49  Op->p3;.  if( pI
28cf0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
28d00 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28d10 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
28d20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28d30 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
28d40 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
28d50 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
28d60 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
28d70 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
28d80 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
28d90 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
28da0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
28db0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
28dc0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
28dd0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
28de0 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
28df0 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
28e00 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
28e10 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
28e20 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
28e30 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
28e40 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
28e50 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
28e60 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
28e70 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
28e80 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
28e90 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
28ea0 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
28eb0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
28ec0 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
28ed0 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
28ee0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
28ef0 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  c = &aMem[pOp->p
28f00 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
28f10 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
28f20 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
28f30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
28f40 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
28f50 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
28f60 70 52 65 63 3b 0a 20 20 20 20 73 71 6c 69 74 65  pRec;.    sqlite
28f70 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
28f80 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  e(pRec);.  }.  c
28f90 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
28fa0 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
28fb0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
28fc0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
28fd0 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  m );.  ctx.pMem 
28fe0 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
28ff0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
29000 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
29010 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
29020 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
29030 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
29040 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
29050 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
29060 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
29070 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
29080 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28  pColl = 0;.  if(
29090 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67   ctx.pFunc->flag
290a0 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
290b0 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
290c0 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
290d0 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
290e0 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
290f0 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
29100 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
29110 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
29120 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
29130 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
29140 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
29150 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
29160 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
29170 56 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e  Val);.  if( ctx.
29180 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
29190 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
291a0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
291b0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
291c0 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
291d0 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
291e0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
291f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
29200 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
29210 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29220 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
29230 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
29240 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
29250 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
29260 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
29270 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
29280 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
29290 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
292a0 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
292b0 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
292c0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
292d0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
292e0 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
292f0 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
29300 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
29310 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
29320 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
29330 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
29340 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
29350 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
29360 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
29370 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
29380 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
29390 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
293a0 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
293b0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
293c0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
293d0 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
293e0 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
293f0 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
29400 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
29410 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
29420 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
29430 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
29440 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
29450 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
29460 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
29470 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
29480 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
29490 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
294a0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
294b0 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
294c0 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
294d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
294e0 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
294f0 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
29500 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
29510 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29520 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29530 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
29540 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
29550 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  m));.  }.  sqlit
29560 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
29570 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
29580 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
29590 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
295a0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
295b0 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
295c0 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
295d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
295e0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
295f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
29600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
29610 6b 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 2a 20  kpoint P1 * * * 
29620 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69  *.**.** Checkpoi
29630 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  nt database P1. 
29640 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20  This is a no-op 
29650 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72  if P1 is not cur
29660 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c  rently in.** WAL
29670 20 6d 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   mode..*/.case O
29680 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
29690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
296a0 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
296b0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->p1);.  break;.
296c0 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  };  .#endif../* 
296d0 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
296e0 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50  ode P1 P2 P3 * P
296f0 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  5.**.** Change t
29700 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
29710 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
29720 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
29730 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
29740 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
29750 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
29760 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
29770 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
29780 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
29790 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
297a0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
297b0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
297c0 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
297d0 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
297e0 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
297f0 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
29800 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
29810 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
29820 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
29830 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
29840 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
29850 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
29860 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
29870 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
29880 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
29890 74 65 6d 70 74 20 74 6f 20 63 68 61 6e 67 65 20  tempt to change 
298a0 69 6e 20 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20  in to or out of 
298b0 57 41 4c 20 6d 6f 64 65 20 66 61 69 6c 73 20 62  WAL mode fails b
298c0 65 63 61 75 73 65 20 61 6e 6f 74 68 65 72 0a 2a  ecause another.*
298d0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 6c 73  * connection als
298e0 6f 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 64  o has the same d
298f0 61 74 61 62 61 73 65 20 6f 70 65 6e 2c 20 74 68  atabase open, th
29900 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53  en an SQLITE_BUS
29910 59 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 61  Y error.** is ra
29920 69 73 65 64 20 69 66 20 50 35 3d 3d 30 2c 20 6f  ised if P5==0, o
29930 72 20 6f 66 20 50 35 21 3d 30 20 74 68 65 20 6a  r of P5!=0 the j
29940 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 63 68 61 6e  ournal mode chan
29950 67 65 64 20 69 73 20 73 6b 69 70 70 65 64 0a 2a  ged is skipped.*
29960 2a 20 77 69 74 68 6f 75 74 20 73 69 67 6e 61 6c  * without signal
29970 69 6e 67 20 74 68 65 20 65 72 72 6f 72 2e 0a 2a  ing the error..*
29980 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
29990 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
299a0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
299b0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
299c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299d0 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
299e0 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
299f0 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
29a00 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
29a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
29a20 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
29a30 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
29a40 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29a60 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
29a70 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
29aa0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
29ab0 2f 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  /.  const sqlite
29ac0 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
29ad0 20 20 20 20 2f 2a 20 54 68 65 20 56 46 53 20 6f      /* The VFS o
29ae0 66 20 70 50 61 67 65 72 20 2a 2f 0a 20 20 63 6f  f pPager */.  co
29af0 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
29b00 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
29b10 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
29b20 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
29b30 72 20 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70  r */..  eNew = p
29b40 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
29b50 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
29b60 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
29b70 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
29b80 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
29b90 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
29ba0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
29bb0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
29bc0 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
29bd0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
29be0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
29bf0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
29c00 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
29c10 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
29c20 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
29c30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
29c40 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
29c50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
29c60 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
29c70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29c80 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
29c90 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  Db );..  /* This
29ca0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
29cb0 69 6e 20 74 77 6f 20 70 6c 61 63 65 73 3a 20 50  in two places: P
29cc0 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
29cd0 64 65 20 61 6e 64 20 41 54 54 41 43 48 2e 0a 20  de and ATTACH.. 
29ce0 20 2a 2a 20 49 6e 20 50 52 41 47 4d 41 20 6a 6f   ** In PRAGMA jo
29cf0 75 72 6e 61 6c 5f 6d 6f 64 65 2c 20 74 68 65 20  urnal_mode, the 
29d00 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
29d10 74 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 69  tree() routine i
29d20 73 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 77 68  s called.  ** wh
29d30 65 6e 20 74 68 65 20 73 74 61 74 6d 65 6e 74 20  en the statment 
29d40 69 73 20 70 72 65 70 61 72 65 64 20 61 6e 64 20  is prepared and 
29d50 73 6f 20 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75  so p->aMutex.nMu
29d60 74 65 78 3e 30 2e 20 20 41 6c 6c 20 6d 75 74 65  tex>0.  All mute
29d70 78 65 73 0a 20 20 2a 2a 20 61 72 65 20 61 6c 72  xes.  ** are alr
29d80 65 61 64 79 20 61 63 71 75 69 72 65 64 2e 20 20  eady acquired.  
29d90 42 75 74 20 77 68 65 6e 20 75 73 65 64 20 69 6e  But when used in
29da0 20 41 54 54 41 43 48 2c 20 73 71 6c 69 74 65 33   ATTACH, sqlite3
29db0 56 64 62 65 55 73 65 73 42 74 72 65 65 28 29 0a  VdbeUsesBtree().
29dc0 20 20 2a 2a 20 69 73 20 6e 6f 74 20 63 61 6c 6c    ** is not call
29dd0 65 64 20 77 68 65 6e 20 74 68 65 20 73 74 61 74  ed when the stat
29de0 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
29df0 64 20 62 65 63 61 75 73 65 20 69 74 20 72 65 71  d because it req
29e00 75 69 72 65 73 20 74 68 65 0a 20 20 2a 2a 20 69  uires the.  ** i
29e10 44 62 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  Db index of the 
29e20 64 61 74 61 62 61 73 65 20 61 73 20 61 20 70 61  database as a pa
29e30 72 61 6d 65 74 65 72 2c 20 61 6e 64 20 74 68 65  rameter, and the
29e40 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
29e50 74 0a 20 20 2a 2a 20 79 65 74 20 62 65 65 6e 20  t.  ** yet been 
29e60 61 74 74 61 63 68 65 64 20 73 6f 20 74 68 61 74  attached so that
29e70 20 69 6e 64 65 78 20 69 73 20 75 6e 61 76 61 69   index is unavai
29e80 6c 61 62 6c 65 2e 20 20 57 65 20 68 61 76 65 20  lable.  We have 
29e90 74 6f 20 77 61 69 74 0a 20 20 2a 2a 20 75 6e 74  to wait.  ** unt
29ea0 69 6c 20 72 75 6e 74 69 6d 65 20 28 6e 6f 77 29  il runtime (now)
29eb0 20 74 6f 20 67 65 74 20 74 68 65 20 6d 75 74 65   to get the mute
29ec0 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 61  x on the newly a
29ed0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29ee0 2e 0a 20 20 2a 2a 20 4e 6f 20 6f 74 68 65 72 20  ..  ** No other 
29ef0 6d 75 74 65 78 65 73 20 61 72 65 20 72 65 71 75  mutexes are requ
29f00 69 72 65 64 20 62 79 20 74 68 65 20 41 54 54 41  ired by the ATTA
29f10 43 48 20 63 6f 6d 6d 61 6e 64 20 73 6f 20 74 68  CH command so th
29f20 69 73 20 69 73 20 73 61 66 65 0a 20 20 2a 2a 20  is is safe.  ** 
29f30 74 6f 20 64 6f 2e 0a 20 20 2a 2f 0a 20 20 61 73  to do..  */.  as
29f40 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
29f50 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
29f60 31 29 29 21 3d 30 20 7c 7c 20 70 2d 3e 61 4d 75  1))!=0 || p->aMu
29f70 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 3b  tex.nMutex==0 );
29f80 0a 20 20 69 66 28 20 70 2d 3e 61 4d 75 74 65 78  .  if( p->aMutex
29f90 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20  .nMutex==0 ){.  
29fa0 20 20 2f 2a 20 54 68 69 73 20 6f 63 63 75 72 73    /* This occurs
29fb0 20 72 69 67 68 74 20 61 66 74 65 72 20 41 54 54   right after ATT
29fc0 41 43 48 2e 20 20 47 65 74 20 61 20 6d 75 74 65  ACH.  Get a mute
29fd0 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 41  x on the newly A
29fe0 54 54 41 43 48 65 64 0a 20 20 20 20 2a 2a 20 64  TTACHed.    ** d
29ff0 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 20 20  atabase. */.    
2a000 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
2a010 74 72 65 65 28 70 2c 20 70 4f 70 2d 3e 70 31 29  tree(p, pOp->p1)
2a020 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2a030 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72  eMutexArrayEnter
2a040 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 70 42 74 20  (p);.  }..  pBt 
2a050 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2a060 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2a070 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2a080 61 67 65 72 28 70 42 74 29 3b 0a 0a 23 69 66 6e  ager(pBt);..#ifn
2a090 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a0a0 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2a0b0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2a0c0 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 29 3b 0a  lename(pPager);.
2a0d0 20 20 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33    pVfs = sqlite3
2a0e0 50 61 67 65 72 56 66 73 28 70 50 61 67 65 72 29  PagerVfs(pPager)
2a0f0 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
2a100 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
2a110 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
2a120 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
2a130 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
2a140 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
2a150 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
2a160 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 78 53  s not support xS
2a170 68 6d 4f 70 65 6e 2e 0a 20 20 2a 2f 0a 20 20 69  hmOpen..  */.  i
2a180 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2a190 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
2a1a0 20 20 26 26 20 28 7a 46 69 6c 65 6e 61 6d 65 5b    && (zFilename[
2a1b0 30 5d 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20  0]==0           
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a1d0 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20   Temp file */.  
2a1e0 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33       || !sqlite3
2a1f0 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65  PagerWalSupporte
2a200 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20  d(pPager))   /* 
2a210 4e 6f 20 78 53 68 6d 4f 70 65 6e 20 73 75 70 70  No xShmOpen supp
2a220 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
2a230 65 4e 65 77 20 3d 20 50 41 47 45 52 5f 4a 4f 55  eNew = PAGER_JOU
2a240 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
2a250 20 20 7d 0a 0a 20 20 69 66 28 20 65 4e 65 77 21    }..  if( eNew!
2a260 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a270 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
2a280 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2a290 67 65 72 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  gerJournalMode(p
2a2a0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2a2b0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 29 3b  RNALMODE_QUERY);
2a2c0 0a 20 20 20 20 69 66 28 20 28 65 4e 65 77 21 3d  .    if( (eNew!=
2a2d0 65 4f 6c 64 29 0a 20 20 20 20 20 26 26 20 28 65  eOld).     && (e
2a2e0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2a2f0 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
2a300 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2a310 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 20 20 29  LMODE_WAL).    )
2a320 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64 62 2d  {.      if( !db-
2a330 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64  >autoCommit || d
2a340 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
2a350 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  >1 ){.        rc
2a360 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2a370 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2a380 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2a390 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2a3a0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2a3b0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2a3c0 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2a3d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2a3e0 20 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77             (eNew
2a3f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a400 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2a410 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2a420 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20       );.        
2a430 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
2a440 73 65 7b 0a 20 20 0a 20 20 20 20 20 20 20 20 69  se{.  .        i
2a450 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2a460 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2a470 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
2a480 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
2a490 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
2a4a0 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
2a4b0 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
2a4c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20            ** to 
2a4d0 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
2a4e0 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
2a4f0 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
2a500 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
2a510 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20         ** file. 
2a520 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  An EXCLUSIVE loc
2a530 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68  k may still be h
2a540 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  eld on the datab
2a550 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20  ase file .      
2a560 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2a570 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2a580 2e 20 0a 20 20 20 20 20 20 20 20 20 20 2a 2f 0a  . .          */.
2a590 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
2a5a0 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
2a5b0 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
2a5c0 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2a5d0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2a5e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2a5f0 61 67 65 72 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  agerJournalMode(
2a600 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
2a610 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
2a620 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2a630 53 59 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  SY && pOp->p5==0
2a640 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2a650 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a660 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
2a670 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
2a680 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
2a690 6c 69 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61  lite3PagerJourna
2a6a0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
2a6b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2a6c0 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 20 20 20  DELETE);.       
2a6d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2a6e0 4b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 0a  K;.        }.  .
2a6f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20          /* Open 
2a700 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
2a710 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2a720 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
2a730 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
2a740 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
2a750 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
2a760 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
2a770 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
2a780 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2a790 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2a7a0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2a7b0 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2a7c0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2a7d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2a7e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2a7f0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2a800 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  Bt, .           
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 20 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77             (eNew
2a830 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a840 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2a850 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
2a860 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2a870 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   && pOp->p5==0 )
2a880 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2a890 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
2a8a0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
2a8b0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
2a8c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 4e 65  ){.          eNe
2a8d0 77 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  w = PAGER_JOURNA
2a8e0 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
2a8f0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
2a900 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 7d  TE_OK;.        }
2a910 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2a920 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
2a930 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a940 57 41 4c 20 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d  WAL */..  eNew =
2a950 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f 75   sqlite3PagerJou
2a960 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2a970 20 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 20 3d   eNew);.  pOut =
2a980 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2a990 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2a9a0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2a9b0 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2a9c0 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2a9d0 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2a9e0 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2a9f0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2aa00 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2aa10 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2aa20 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2aa30 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2aa40 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2aa50 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2aa60 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 0a 23 69 66  break;.};  ..#if
2aa70 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2aa80 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
2aa90 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2aaa0 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
2aab0 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
2aac0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2aad0 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72  Vacuum the entir
2aae0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
2aaf0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61  s opcode will ca
2ab00 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61  use other virtua
2ab10 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f  l.** machines to
2ab20 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20   be created and 
2ab30 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74  run.  It may not
2ab40 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
2ab50 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e  within.** a tran
2ab60 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  saction..*/.case
2ab70 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20   OP_Vacuum: {.  
2ab80 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2ab90 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2aba0 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2abb0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2abc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2abd0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2abe0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2abf0 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2ac00 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2ac10 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2ac20 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2ac30 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2ac40 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2ac50 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2ac60 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2ac70 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2ac80 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2ac90 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2aca0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2acb0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2acc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2acd0 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2ace0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2acf0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2ad00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2ad10 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2ad20 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2ad30 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2ad40 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
2ad50 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2ad60 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2ad70 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ad80 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2ad90 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
2ada0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
2adb0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2adc0 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  - 1;.    rc = SQ
2add0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62  LITE_OK;.  }.  b
2ade0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2adf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
2ae00 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
2ae10 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
2ae20 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
2ae30 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  to become expire
2ae40 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74  d. An expired st
2ae50 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73  atement.** fails
2ae60 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63   with an error c
2ae70 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43  ode of SQLITE_SC
2ae80 48 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76  HEMA if it is ev
2ae90 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20  er executed .** 
2aea0 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65  (via sqlite3_ste
2aeb0 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  p())..** .** If 
2aec0 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
2aed0 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
2aee0 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2aef0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2af00 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
2af10 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
2af20 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
2af30 6e 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20  nt is affected. 
2af40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
2af50 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
2af60 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
2af70 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2af80 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
2af90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
2afa0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
2afb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2afc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2afd0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
2afe0 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
2aff0 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
2b000 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  *.**.** Obtain a
2b010 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
2b020 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
2b030 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2b040 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
2b050 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
2b060 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
2b070 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
2b080 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
2b090 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2b0a0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
2b0b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
2b0c0 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
2b0d0 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
2b0e0 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
2b0f0 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
2b100 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
2b110 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
2b120 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
2b130 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
2b140 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
2b150 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
2b160 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
2b170 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
2b180 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2b190 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
2b1a0 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
2b1b0 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
2b1c0 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
2b1d0 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
2b1e0 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
2b1f0 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
2b200 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
2b210 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
2b220 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
2b230 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
2b240 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
2b250 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
2b260 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
2b270 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
2b280 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
2b290 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
2b2a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
2b2b0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21  Mask & (1<<p1))!
2b2c0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2b2d0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2b2e0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2b2f0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2b300 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2b310 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2b320 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2b330 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2b340 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2b350 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2b360 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2b370 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2b380 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2b390 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b3a0 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2b3b0 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2b3c0 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2b3d0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2b3e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2b3f0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2b400 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2b410 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2b420 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2b430 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2b440 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2b450 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2b460 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2b470 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2b480 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2b490 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2b4a0 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2b4b0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2b4c0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2b4d0 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2b4e0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2b4f0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2b500 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2b510 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2b520 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2b530 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2b540 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2b550 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2b560 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2b570 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2b580 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2b590 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2b5a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2b5b0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b5c0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2b5d0 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2b5e0 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  b ){.    sqlite3
2b5f0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
2b600 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
2b610 45 72 72 4d 73 67 20 3d 20 70 56 54 61 62 2d 3e  ErrMsg = pVTab->
2b620 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2b630 20 20 20 20 70 56 54 61 62 2d 3e 70 56 74 61 62      pVTab->pVtab
2b640 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
2b650 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2b660 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2b670 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2b680 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2b690 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2b6a0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2b6b0 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20   VCreate P1 * * 
2b6c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2b6d0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2b6e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2b6f0 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c  database P1. Cal
2b700 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
2b710 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74  thod.** for that
2b720 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2b730 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
2b740 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2b750 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
2b760 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2b770 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  z, &p->zErrMsg);
2b780 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2b790 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2b7a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2b7b0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2b7c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2b7d0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2b7e0 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50  Destroy P1 * * P
2b7f0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2b800 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
2b810 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
2b820 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c  atabase P1.  Cal
2b830 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d  l the xDestroy m
2b840 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74  ethod.** of that
2b850 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2b860 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20  OP_VDestroy: {. 
2b870 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2b880 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 2;.  rc = sql
2b890 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2b8a0 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
2b8b0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70   pOp->p4.z);.  p
2b8c0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2b8d0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23   0;.  break;.}.#
2b8e0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2b8f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b900 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2b910 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2b920 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2b930 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
2b940 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2b950 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2b960 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2b970 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2b980 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2b990 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
2b9a0 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
2b9b0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
2b9c0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
2b9d0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
2b9e0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
2b9f0 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
2ba00 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
2ba10 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2ba20 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
2ba30 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2ba40 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2ba50 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2ba60 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2ba70 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75  *pModule;..  pCu
2ba80 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75  r = 0;.  pVtabCu
2ba90 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  rsor = 0;.  pVta
2baa0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2bab0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  b->pVtab;.  pMod
2bac0 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
2bad0 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
2bae0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2baf0 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c  (pVtab && pModul
2bb00 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  e);.  rc = pModu
2bb10 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
2bb20 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
2bb30 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2bb40 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
2bb50 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
2bb60 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2bb70 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
2bb80 20 3d 20 30 3b 0a 20 20 69 66 28 20 53 51 4c 49   = 0;.  if( SQLI
2bb90 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
2bba0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
2bbb0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2bbc0 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
2bbd0 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
2bbe0 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
2bbf0 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
2bc00 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ise vdbe cursor 
2bc10 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
2bc20 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
2bc30 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
2bc40 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69  0, -1, 0);.    i
2bc50 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20  f( pCur ){.     
2bc60 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2bc70 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  or = pVtabCursor
2bc80 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d  ;.      pCur->pM
2bc90 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72  odule = pVtabCur
2bca0 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
2bcb0 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ule;.    }else{.
2bcc0 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
2bcd0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
2bce0 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
2bcf0 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
2bd00 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2bd10 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2bd20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bd30 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2bd40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bd50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bd60 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
2bd70 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2bd80 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2bd90 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
2bda0 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
2bdb0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
2bdc0 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
2bdd0 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
2bde0 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
2bdf0 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
2be00 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
2be10 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
2be20 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
2be30 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
2be40 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
2be50 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
2be60 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
2be70 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
2be80 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
2be90 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
2bea0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2beb0 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
2bec0 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
2bed0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
2bee0 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
2bef0 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
2bf00 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
2bf10 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
2bf20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2bf30 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
2bf40 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
2bf50 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
2bf60 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
2bf70 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
2bf80 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
2bf90 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
2bfa0 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
2bfb0 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
2bfc0 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
2bfd0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
2bfe0 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
2bff0 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
2c000 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
2c010 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
2c020 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
2c030 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
2c040 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
2c050 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
2c060 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
2c070 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
2c080 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
2c090 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
2c0a0 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
2c0b0 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
2c0c0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2c0d0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
2c0e0 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
2c0f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2c100 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2c110 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2c120 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
2c130 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2c140 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
2c150 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
2c160 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
2c170 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2c180 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
2c190 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
2c1a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2c1b0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2c1c0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
2c1d0 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
2c1e0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2c1f0 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  );.  pVtabCursor
2c200 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2c210 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  rsor;.  pVtab = 
2c220 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2c230 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2c240 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2c250 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
2c260 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
2c270 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
2c280 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
2c290 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
2c2a0 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
2c2b0 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
2c2c0 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
2c2d0 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
2c2e0 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
2c2f0 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
2c300 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
2c310 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
2c320 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
2c330 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
2c340 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d  Arg;.    for(i =
2c350 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
2c360 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  {.      apArg[i]
2c370 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
2c380 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2c390 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70  eMemStoreType(ap
2c3a0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a  Arg[i]);.    }..
2c3b0 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
2c3c0 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  hod = 1;.    rc 
2c3d0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
2c3e0 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20  er(pVtabCursor, 
2c3f0 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e  iQuery, pOp->p4.
2c400 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b  z, nArg, apArg);
2c410 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2c420 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71  thod = 0;.    sq
2c430 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2c440 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
2c450 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2c460 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2c470 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
2c480 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63   = 0;.    if( rc
2c490 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2c4a0 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75       res = pModu
2c4b0 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75  le->xEof(pVtabCu
2c4c0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rsor);.    }..  
2c4d0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
2c4e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2c4f0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
2c500 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
2c510 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
2c520 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2c530 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c540 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2c550 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c560 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2c570 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
2c580 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
2c590 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
2c5a0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
2c5b0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
2c5c0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
2c5d0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
2c5e0 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
2c5f0 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
2c600 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
2c610 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
2c620 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
2c630 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2c640 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2c650 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2c660 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
2c670 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
2c680 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
2c690 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
2c6a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2c6b0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2c6c0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
2c6d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2c6e0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2c6f0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
2c700 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2c710 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2c720 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
2c730 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2c740 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
2c750 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2c760 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2c770 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2c780 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2c790 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2c7a0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
2c7b0 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
2c7c0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
2c7d0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
2c7e0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
2c7f0 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
2c800 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
2c810 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
2c820 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
2c830 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
2c840 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
2c850 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
2c860 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
2c870 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
2c880 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
2c890 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
2c8a0 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
2c8b0 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
2c8c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2c8d0 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
2c8e0 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
2c8f0 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
2c900 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
2c910 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ..  rc = pModule
2c920 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
2c930 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
2c940 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
2c950 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2c960 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2c970 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
2c980 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
2c990 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
2c9a0 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 43  sg = 0;.  if( sC
2c9b0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
2c9c0 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
2c9d0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
2c9e0 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
2c9f0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
2ca00 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33  nction to the P3
2ca10 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20   register. We.  
2ca20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72  ** do this regar
2ca30 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
2ca40 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   or not an error
2ca50 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73   occurred to ens
2ca60 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e  ure any.  ** dyn
2ca70 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  amic allocation 
2ca80 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61  in sContext.s (a
2ca90 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20   Mem struct) is 
2caa0 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a   released..  */.
2cab0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2cac0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f  ngeEncoding(&sCo
2cad0 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e  ntext.s, encodin
2cae0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
2caf0 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20  eMemMove(pDest, 
2cb00 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20  &sContext.s);.  
2cb10 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2cb20 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
2cb30 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2cb40 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
2cb50 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2cb60 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
2cb70 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2cb80 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2cb90 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2cba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2cbb0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2cbc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cbd0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2cbe0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
2cbf0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2cc00 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
2cc10 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
2cc20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
2cc30 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
2cc40 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
2cc50 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
2cc60 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
2cc70 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
2cc80 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
2cc90 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
2cca0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
2ccb0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2ccc0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2ccd0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
2cce0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
2ccf0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2cd00 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2cd10 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2cd20 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
2cd30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2cd40 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
2cd50 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2cd60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2cd70 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2cd80 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
2cd90 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2cda0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2cdb0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2cdc0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2cdd0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2cde0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2cdf0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2ce00 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
2ce10 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
2ce20 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
2ce30 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
2ce40 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
2ce50 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
2ce60 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2ce70 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
2ce80 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
2ce90 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
2cea0 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
2ceb0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2cec0 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
2ced0 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
2cee0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
2cef0 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
2cf00 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
2cf10 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
2cf20 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
2cf30 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
2cf40 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
2cf50 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
2cf60 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
2cf70 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56  r..  */.  p->inV
2cf80 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2cf90 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2cfa0 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
2cfb0 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e  Cursor);.  p->in
2cfc0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2cfd0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2cfe0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
2cff0 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
2d000 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2d010 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
2d020 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d   = 0;.  if( rc==
2d030 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2d040 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
2d050 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
2d060 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20  Cursor);.  }..  
2d070 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2d080 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2d090 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2d0a0 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2d0b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2d0c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2d0d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2d0e0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2d0f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d100 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2d110 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
2d120 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
2d130 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2d140 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2d150 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2d160 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2d170 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2d180 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2d190 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2d1a0 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
2d1b0 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
2d1c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2d1d0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
2d1e0 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
2d1f0 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
2d200 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
2d210 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
2d220 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2d230 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
2d240 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2d250 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2d260 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
2d270 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2d280 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
2d290 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
2d2a0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2d2b0 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
2d2c0 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
2d2d0 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
2d2e0 5f 53 74 72 20 29 3b 0a 20 20 72 63 20 3d 20 70  _Str );.  rc = p
2d2f0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2d300 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
2d310 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74  ame->z);.  sqlit
2d320 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
2d330 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
2d340 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
2d350 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
2d360 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a  ->zErrMsg = 0;..
2d370 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d380 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2d390 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2d3a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2d3b0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
2d3c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2d3d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2d3e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2d3f0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2d400 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2d410 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2d420 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
2d430 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
2d440 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
2d450 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
2d460 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
2d470 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
2d480 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
2d490 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
2d4a0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
2d4b0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
2d4c0 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
2d4d0 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
2d4e0 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
2d4f0 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
2d500 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
2d510 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
2d520 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
2d530 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
2d540 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
2d550 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
2d560 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
2d570 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
2d580 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
2d590 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
2d5a0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
2d5b0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
2d5c0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
2d5d0 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
2d5e0 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
2d5f0 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
2d600 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
2d610 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
2d620 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
2d630 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
2d640 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
2d650 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
2d660 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
2d670 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
2d680 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
2d690 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
2d6a0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
2d6b0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
2d6c0 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
2d6d0 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
2d6e0 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
2d6f0 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
2d700 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
2d710 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
2d720 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
2d730 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
2d740 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
2d750 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
2d760 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
2d770 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
2d780 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
2d790 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
2d7a0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
2d7b0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2d7c0 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
2d7d0 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
2d7e0 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erted..*/.case O
2d7f0 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
2d800 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2d810 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  ab;.  sqlite3_mo
2d820 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2d830 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2d840 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
2d850 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20  64 rowid;.  Mem 
2d860 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a  **apArg;.  Mem *
2d870 70 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  pX;..  pVtab = p
2d880 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2d890 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2d8a0 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2d8b0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2d8c0 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
2d8d0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
2d8e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
2d8f0 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
2d900 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
2d910 64 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41  date) ){.    apA
2d920 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2d930 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
2d940 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
2d950 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
2d960 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2d970 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2d980 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72  (pX);.      apAr
2d990 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
2d9a0 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
2d9b0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2d9c0 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
2d9d0 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
2d9e0 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  d);.    sqlite3D
2d9f0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
2da00 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
2da10 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
2da20 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
2da30 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
2da40 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2da50 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
2da60 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2da70 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
2da80 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
2da90 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
2daa0 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
2dab0 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
2dac0 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  d;.    }.    p->
2dad0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20  nChange++;.  }. 
2dae0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2daf0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2db00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2db10 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
2db20 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
2db30 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
2db40 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
2db50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
2db60 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
2db70 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
2db80 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
2db90 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
2dba0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
2dbb0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
2dbc0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2dbd0 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
2dbe0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
2dbf0 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
2dc00 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
2dc10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2dc20 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2dc30 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f  ITE_OMIT_TRACE./
2dc40 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20  * Opcode: Trace 
2dc50 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2dc60 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
2dc70 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
2dc80 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
2dc90 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
2dca0 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
2dcb0 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
2dcc0 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
2dcd0 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
2dce0 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  back..*/.case OP
2dcf0 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72  _Trace: {.  char
2dd00 20 2a 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72   *zTrace;..  zTr
2dd10 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
2dd20 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
2dd30 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
2dd40 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28  Trace ){.    if(
2dd50 20 64 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20   db->xTrace ){. 
2dd60 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73       char *z = s
2dd70 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
2dd80 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
2dd90 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65        db->xTrace
2dda0 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
2ddb0 7a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  z);.      sqlite
2ddc0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
2ddd0 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
2dde0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
2ddf0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
2de00 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
2de10 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2de20 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
2de30 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
2de40 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d  , zTrace);.    }
2de50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2de60 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20  E_DEBUG */.  }. 
2de70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2de80 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  .../* Opcode: No
2de90 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  op * * * * *.**.
2dea0 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20  ** Do nothing.  
2deb0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2dec0 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c   is often useful
2ded0 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65   as a jump.** de
2dee0 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  stination..*/./*
2def0 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78  .** The magic Ex
2df00 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65  plain opcode are
2df10 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77   only inserted w
2df20 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28  hen explain==2 (
2df30 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73  which.** is to s
2df40 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c  ay when the EXPL
2df50 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
2df60 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a  yntax is used.).
2df70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  ** This opcode r
2df80 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69  ecords informati
2df90 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69  on from the opti
2dfa0 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68  mizer.  It is th
2dfb0 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73  e.** the same as
2dfc0 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20   a no-op.  This 
2dfd0 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70  opcodesnever app
2dfe0 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56  ears in a real V
2dff0 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65  M program..*/.de
2e000 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20  fault: {        
2e010 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61    /* This is rea
2e020 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20  lly OP_Noop and 
2e030 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20  OP_Explain */.  
2e040 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2e050 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20  ode==OP_Noop || 
2e060 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e070 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65  Explain );.  bre
2e080 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
2e090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e0a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e0b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e0c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e0d0 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
2e0e0 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
2e0f0 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
2e100 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
2e110 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
2e120 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
2e130 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
2e140 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
2e150 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
2e160 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
2e170 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
2e180 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
2e190 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
2e1a0 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
2e1b0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
2e1c0 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
2e1d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e1f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e210 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
2e220 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
2e230 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
2e240 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74   elapsed = sqlit
2e250 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61  e3Hwtime() - sta
2e260 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  rt;.      pOp->c
2e270 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64  ycles += elapsed
2e280 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
2e290 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  ++;.#if 0.      
2e2a0 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
2e2b0 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61  , "%10llu ", ela
2e2c0 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73  psed);.        s
2e2d0 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
2e2e0 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63  p(stdout, origPc
2e2f0 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b  , &aOp[origPc]);
2e300 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65  .#endif.    }.#e
2e310 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
2e320 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
2e330 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
2e340 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
2e350 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
2e360 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
2e370 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
2e380 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
2e390 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
2e3a0 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
2e3b0 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
2e3c0 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
2e3d0 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
2e3e0 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
2e3f0 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
2e400 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
2e410 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
2e420 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
2e430 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
2e440 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  G.    assert( pc
2e450 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  >=-1 && pc<p->nO
2e460 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  p );..#ifdef SQL
2e470 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
2e480 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
2e490 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
2e4a0 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65  fprintf(p->trace
2e4b0 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ,"rc=%d\n",rc);.
2e4c0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
2e4d0 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
2e4e0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c  OUT2_PRERELEASE|
2e4f0 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20  OPFLG_OUT2) ){. 
2e500 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
2e510 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70  race(p->trace, p
2e520 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
2e530 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
2e540 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
2e550 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
2e560 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20  OUT3 ){.        
2e570 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
2e580 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c  >trace, pOp->p3,
2e590 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
2e5a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2e5b0 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54  #endif  /* SQLIT
2e5c0 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69  E_DEBUG */.#endi
2e5d0 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a  f  /* NDEBUG */.
2e5e0 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20    }  /* The end 
2e5f0 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c  of the for(;;) l
2e600 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68  oop the loops th
2e610 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f  rough opcodes */
2e620 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61  ..  /* If we rea
2e630 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69  ch this point, i
2e640 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65  t means that exe
2e650 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68  cution is finish
2e660 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20  ed with.  ** an 
2e670 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69  error of some ki
2e680 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72  nd..  */.vdbe_er
2e690 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65  ror_halt:.  asse
2e6a0 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72  rt( rc );.  p->r
2e6b0 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61  c = rc;.  testca
2e6c0 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
2e6d0 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
2e6e0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  );.  sqlite3_log
2e6f0 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20  (rc, "statement 
2e700 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25  aborts at %d: [%
2e710 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20  s] %s", .       
2e720 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20              pc, 
2e730 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
2e740 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Msg);.  sqlite3V
2e750 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
2e760 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
2e770 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
2e780 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2e790 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
2e7a0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
2e7b0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 29  tSchemaOnFault )
2e7c0 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
2e7d0 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
2e7e0 30 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69  0);..  /* This i
2e7f0 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
2e800 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
2e810 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
2e820 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
2e830 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
2e840 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
2e850 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
2e860 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
2e870 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74  _return:.  sqlit
2e880 65 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61  e3BtreeMutexArra
2e890 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74 65  yLeave(&p->aMute
2e8a0 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
2e8b0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2e8c0 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
2e8d0 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
2e8e0 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
2e8f0 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
2e900 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
2e910 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
2e920 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2e930 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
2e940 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
2e950 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
2e960 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
2e970 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2e980 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2e990 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
2e9a0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
2e9b0 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
2e9c0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2e9d0 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
2e9e0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2e9f0 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
2ea00 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
2ea10 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
2ea20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2ea30 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2ea40 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
2ea50 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
2ea60 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
2ea70 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
2ea80 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
2ea90 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
2eaa0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2eab0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
2eac0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
2ead0 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
2eae0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
2eaf0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2eb00 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2eb10 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2eb20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2eb30 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2eb40 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2eb50 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2eb60 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
2eb70 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2eb80 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2eb90 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
2eba0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
2ebb0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
2ebc0 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
2ebd0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2ebe0 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
2ebf0 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
2ec00 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
2ec10 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
2ec20 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
2ec30 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
2ec40 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ec50 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2ec60 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2ec70 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
2ec80 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.