/ Hex Artifact Content
Login

Artifact d7b996a5b75753ade4471fbe0452a684dc047d72:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 31 38 20 32 30 30 39  e.c,v 1.818 2009
0850: 2f 30 32 2f 31 39 20 31 34 3a 33 39 3a 32 35 20  /02/19 14:39:25 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 65 73 74 20 61 20 72 65 67 69 73 74 65  * Test a registe
0f60: 72 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 65  r to see if it e
0f70: 78 63 65 65 64 73 20 74 68 65 20 63 75 72 72 65  xceeds the curre
0f80: 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62 20  nt maximum blob 
0f90: 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74 20 64  size..** If it d
0fa0: 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  oes, record the 
0fb0: 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62  new maximum blob
0fc0: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   size..*/.#if de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
0fe0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
0ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1000: 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  IN_TEST).# defin
1010: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
1020: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
1030: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
1040: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
1050: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1060: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1070: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1080: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1090: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
10a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
10b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
10c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
10d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
10e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
10f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1100: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1110: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1120: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1130: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1140: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1150: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1170: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1180: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1190: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
11a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
11b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
11c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
11d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
11e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
11f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1200: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1210: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1220: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1230: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1240: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1250: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1260: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1270: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1280: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1290: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
12a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
12b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
12d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
12e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
12f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1300: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1310: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1320: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1330: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1340: 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20 73  nto an MEM_Dyn s
1350: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
1360: 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  e Deephemeralize
1370: 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50  (P) \.   if( ((P
1380: 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68  )->flags&MEM_Eph
1390: 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20  em)!=0 \.       
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50  mMakeWriteable(P
13c0: 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ) ){ goto no_mem
13d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73  ;}../*.** Call s
13e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
13f0: 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68 65  andBlob() on the
1400: 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65 20   supplied value 
1410: 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50  (type Mem*).** P
1420: 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   if required..*/
1430: 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42  .#define ExpandB
1440: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
1450: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
1460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
1470: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a  ndBlob(P):0)../*
1480: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1490: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65  m points at a re
14a0: 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c  gister that will
14b0: 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a   be passed to a.
14c0: 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ** user-defined 
14d0: 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75  function or retu
14e0: 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
14f0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f   as the result o
1500: 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68  f a query..** Th
1510: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1520: 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20 74  t, 'db_enc' is t
1530: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1540: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64 62   used by the vdb
1550: 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74 65  e for.** registe
1560: 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  r variables.  Th
1570: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1580: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1590: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
15a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
15b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
15c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
15d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
15e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
15f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1600: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1610: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1620: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1630: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1640: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1650: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1660: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1670: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1680: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
16a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
16b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
16c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
16e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
16f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1700: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1720: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1730: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1750: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1760: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1770: 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73 20  *.** Properties 
1780: 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  of opcodes.  The
1790: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
17a0: 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63  ER macro is.** c
17b0: 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f  reated by mkopco
17c0: 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20 63  deh.awk during c
17d0: 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74  ompilation.  Dat
17e0: 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  a is obtained.**
17f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e   from the commen
1800: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1810: 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a 22   "case OP_xxxx:"
1820: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a   statements in.*
1830: 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a  * this file.  .*
1840: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  /.static const u
1850: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 70 63  nsigned char opc
1860: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20  odeProperty[] = 
1870: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
1880: 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  R;../*.** Return
1890: 20 74 72 75 65 20 69 66 20 61 6e 20 6f 70 63 6f   true if an opco
18a0: 64 65 20 68 61 73 20 61 6e 79 20 6f 66 20 74 68  de has any of th
18b0: 65 20 4f 50 46 4c 47 5f 78 78 78 20 70 72 6f 70  e OPFLG_xxx prop
18c0: 65 72 74 69 65 73 0a 2a 2a 20 73 70 65 63 69 66  erties.** specif
18d0: 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a  ied by mask..*/.
18e0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4f  int sqlite3VdbeO
18f0: 70 63 6f 64 65 48 61 73 50 72 6f 70 65 72 74 79  pcodeHasProperty
1900: 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74  (int opcode, int
1910: 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73 65 72 74   mask){.  assert
1920: 28 20 6f 70 63 6f 64 65 3e 30 20 26 26 20 6f 70  ( opcode>0 && op
1930: 63 6f 64 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66  code<(int)sizeof
1940: 28 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29  (opcodeProperty)
1950: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70   );.  return (op
1960: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63  codeProperty[opc
1970: 6f 64 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d  ode]&mask)!=0;.}
1980: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1990: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
19a0: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
19b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
19c0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
19d0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
19e0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
19f0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1a00: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1a10: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a30: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1a40: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a60: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1a70: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 4f  dbeCursor */.  O
1a80: 70 20 2a 70 4f 70 2c 20 20 20 20 20 20 20 20 20  p *pOp,         
1a90: 20 20 20 20 20 2f 2a 20 2a 2f 0a 20 20 69 6e 74       /* */.  int
1aa0: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1ab0: 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61 62     /* When datab
1ac0: 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 62  ase the cursor b
1ad0: 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31  elongs to, or -1
1ae0: 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72 65   */.  int isBtre
1af0: 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20 2a  eCursor     /* *
1b00: 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74  /.){.  /* Find t
1b10: 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
1b20: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
1b30: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c   to store the bl
1b40: 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a  ob of memory.  *
1b50: 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  * required for t
1b60: 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73  his VdbeCursor s
1b70: 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20  tructure. It is 
1b80: 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73  convenient to us
1b90: 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d  e a .  ** vdbe m
1ba0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61  emory cell to ma
1bb0: 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  nage the memory 
1bc0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69  allocation requi
1bd0: 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56  red for a.  ** V
1be0: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1bf0: 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c  ure for the foll
1c00: 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20  owing reasons:. 
1c10: 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d   **.  **   * Som
1c20: 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75  etimes cursor nu
1c30: 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66  mbers are used f
1c40: 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64  or a couple of d
1c50: 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20  ifferent.  **   
1c60: 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20    purposes in a 
1c70: 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68  vdbe program. Th
1c80: 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73  e different uses
1c90: 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20   might require. 
1ca0: 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e   **     differen
1cb0: 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69  t sized allocati
1cc0: 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ons. Memory cell
1cd0: 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62  s provide growab
1ce0: 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f  le.  **     allo
1cf0: 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  cations..  **.  
1d00: 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e  **   * When usin
1d10: 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  g ENABLE_MEMORY_
1d20: 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f  MANAGEMENT, memo
1d30: 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20  ry cell buffers 
1d40: 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20  can.  **     be 
1d50: 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61  freed lazily via
1d60: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c   the sqlite3_rel
1d70: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50  ease_memory() AP
1d80: 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20  I. This.  **    
1d90: 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e   minimizes the n
1da0: 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20  umber of malloc 
1db0: 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68  calls made by th
1dc0: 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20  e system..  **. 
1dd0: 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73   ** Memory cells
1de0: 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65   for cursors are
1df0: 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68   allocated at th
1e00: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64  e top of the add
1e10: 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e  ress.  ** space.
1e20: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   Memory cell (p-
1e30: 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e  >nMem) correspon
1e40: 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20  ds to cursor 0. 
1e50: 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63  Space for.  ** c
1e60: 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67  ursor 1 is manag
1e70: 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c  ed by memory cel
1e80: 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65  l (p->nMem-1), e
1e90: 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  tc..  */.  Mem *
1ea0: 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1eb0: 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a  p->nMem-iCur];..
1ec0: 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56    int nByte;.  V
1ed0: 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d  dbeCursor *pCx =
1ee0: 20 30 3b 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   0;.  /* If the 
1ef0: 6f 70 63 6f 64 65 20 6f 66 20 70 4f 70 20 69 73  opcode of pOp is
1f00: 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e   OP_SetNumColumn
1f10: 73 2c 20 74 68 65 6e 20 70 4f 70 2d 3e 70 32 20  s, then pOp->p2 
1f20: 63 6f 6e 74 61 69 6e 73 0a 20 20 2a 2a 20 74 68  contains.  ** th
1f30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1f40: 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1f50: 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  s contained in t
1f60: 68 65 20 74 61 62 6c 65 20 6f 72 0a 20 20 2a 2a  he table or.  **
1f70: 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1f80: 6e 65 64 2e 20 55 73 65 20 74 68 69 73 20 74 6f  ned. Use this to
1f90: 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66   reserve space f
1fa0: 6f 72 20 74 68 65 20 0a 20 20 2a 2a 20 56 64 62  or the .  ** Vdb
1fb0: 65 43 75 72 73 6f 72 2e 61 54 79 70 65 5b 5d 20  eCursor.aType[] 
1fc0: 61 72 72 61 79 2e 0a 20 20 2a 2f 0a 20 20 69 6e  array..  */.  in
1fd0: 74 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20  t nField = 0;.  
1fe0: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1ff0: 3d 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  =OP_SetNumColumn
2000: 73 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  s || pOp->opcode
2010: 3d 3d 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  ==OP_OpenEphemer
2020: 61 6c 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  al ){.    nField
2030: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a   = pOp->p2;.  }.
2040: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
2050: 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2060: 6f 72 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73  or) + .      (is
2070: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
2080: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
2090: 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20  ze():0) + .     
20a0: 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66   2*nField*sizeof
20b0: 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74  (u32);..  assert
20c0: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
20d0: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
20e0: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
20f0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
2100: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2110: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2120: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2130: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2140: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2150: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
2160: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
2170: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2180: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2190: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
21a0: 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d 2d 3e     memset(pMem->
21b0: 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a 20 20  z, 0, nByte);.  
21c0: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
21d0: 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c  ;.    pCx->nFiel
21e0: 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20  d = nField;.    
21f0: 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a 20 20  if( nField ){.  
2200: 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65 20 3d      pCx->aType =
2210: 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a   (u32 *)&pMem->z
2220: 5b 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  [sizeof(VdbeCurs
2230: 6f 72 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  or)];.    }.    
2240: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
2250: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
2260: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2270: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2280: 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28  &pMem->z[sizeof(
2290: 56 64 62 65 43 75 72 73 6f 72 29 2b 32 2a 6e 46  VdbeCursor)+2*nF
22a0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
22b0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
22c0: 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a  eturn pCx;.}../*
22d0: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
22e0: 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20  rt a value into 
22f0: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2300: 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63  entation if we c
2310: 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68  an.** do so with
2320: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
2330: 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rmation.  In oth
2340: 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
2350: 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73   string.** looks
2360: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2370: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
2380: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  a number.  If it
2390: 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f   does not.** loo
23a0: 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  k like a number,
23b0: 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e   leave it alone.
23c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
23d0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
23e0: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b  nity(Mem *pRec){
23f0: 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c  .  if( (pRec->fl
2400: 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c  ags & (MEM_Real|
2410: 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a  MEM_Int))==0 ){.
2420: 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b      int realnum;
2430: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2440: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
2450: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 28  pRec);.    if( (
2460: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2470: 53 74 72 29 0a 20 20 20 20 20 20 20 20 20 26 26  Str).         &&
2480: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
2490: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e  (pRec->z, &realn
24a0: 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29 20 29  um, pRec->enc) )
24b0: 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61 6c 75  {.      i64 valu
24c0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
24d0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
24e0: 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54 45 5f  ng(pRec, SQLITE_
24f0: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
2500: 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c   !realnum && sql
2510: 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d  ite3Atoi64(pRec-
2520: 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a 20  >z, &value) ){. 
2530: 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69         pRec->u.i
2540: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2550: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2560: 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pRec, MEM_Int);
2570: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2580: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2590: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52 65 63  eMemRealify(pRec
25a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
25b0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
25c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
25d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
25e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
25f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2600: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2610: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2620: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2630: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2640: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2650: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2660: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2670: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2680: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2690: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
26a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
26b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
26c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
26d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
26e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
26f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2700: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2710: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2720: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2730: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2740: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2750: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2760: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2770: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2780: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2790: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
27a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
27b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
27c0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
27d0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
27e0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
27f0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2800: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2810: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2820: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2830: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2840: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2850: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2860: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2870: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2880: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2890: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
28a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
28b0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
28c0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
28d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
28e0: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
28f0: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2900: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2910: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2920: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2930: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2940: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2950: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2960: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
2970: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2980: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
2990: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
29a0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
29b0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
29c0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
29d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29e0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
29f0: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2a00: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2a10: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2a20: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2a30: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2a40: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2a50: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2a60: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a70: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a80: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a90: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2aa0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2ab0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2ac0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
2ad0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2ae0: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
2af0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2b00: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2b10: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2b20: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2b30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2b40: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b50: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b60: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b70: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b80: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b90: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2ba0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2bb0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2bc0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bd0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2be0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bf0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2c00: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2c10: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c20: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c30: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c40: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c50: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a  e argument..**.*
2c60: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58 50  * This is an EXP
2c70: 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e  ERIMENTAL api an
2c80: 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20  d is subject to 
2c90: 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61  change or remova
2ca0: 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  l..*/.int sqlite
2cb0: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2cc0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2cd0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2ce0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2cf0: 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  Val;.  applyNume
2d00: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2d10: 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e  );.  storeTypeIn
2d20: 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72  fo(pMem, 0);.  r
2d30: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2d40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2d50: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2d60: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2d70: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2d80: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2d90: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2da0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2db0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2dc0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2dd0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2de0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2df0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2e00: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2e10: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2e20: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2e30: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2e40: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2e50: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2e60: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2e70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2e80: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2e90: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2ea0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2eb0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2ec0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2ed0: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2ee0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2ef0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2f00: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2f10: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2f20: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2f30: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2f40: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2f50: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2f60: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2f70: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2f80: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2f90: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2fa0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2fb0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2fc0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fd0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2fe0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2ff0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3000: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3010: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3020: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3030: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3040: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3050: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3060: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3070: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3080: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3090: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
30a0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
30b0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
30c0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
30d0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
30e0: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
30f0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3100: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3110: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
3120: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3130: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3140: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3150: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3160: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3170: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3180: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3190: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
31a0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
31b0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
31c0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
31d0: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
31e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
31f0: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3200: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3210: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3220: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3230: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3240: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3250: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3260: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3270: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3280: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3290: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
32a0: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
32b0: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
32c0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
32d0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
32e0: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
32f0: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
3300: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3310: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
3320: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
3330: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
3340: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3350: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3360: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3370: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3380: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3390: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
33a0: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
33b0: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
33c0: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
33d0: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
33e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
33f0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
3400: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3410: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3420: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3430: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
3440: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3450: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3460: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3470: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3480: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3490: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
34a0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
34b0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
34c0: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
34d0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
34e0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
3500: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
3510: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
3520: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
3530: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
3540: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3550: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3560: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3570: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3580: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3590: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
35a0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
35b0: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
35c0: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
35d0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
35e0: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
35f0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3600: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
3610: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
3620: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
3630: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3640: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
3650: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3660: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3670: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3680: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3690: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
36a0: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
36b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
36c0: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
36d0: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
36e0: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
36f0: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
3700: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
3710: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
3720: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
3730: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3740: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3760: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3770: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3780: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3790: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
37a0: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
37b0: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
37c0: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
37d0: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
37e0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
37f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
3800: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3810: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3820: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
3830: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3840: 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d  out, " r:%g", p-
3850: 3e 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >r);.  }else{.  
3860: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3870: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3880: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3890: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70  p, zBuf);.    fp
38a0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b  rintf(out, " ");
38b0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
38c0: 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  , "%s", zBuf);. 
38d0: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
38e0: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46   registerTrace(F
38f0: 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52  ILE *out, int iR
3900: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66  eg, Mem *p){.  f
3910: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47  printf(out, "REG
3920: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
3930: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
3940: 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69  (out, p);.  fpri
3950: 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a  ntf(out, "\n");.
3960: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3970: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3980: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3990: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70  _TRACE(R,M) if(p
39a0: 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72  ->trace)register
39b0: 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52  Trace(p->trace,R
39c0: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
39d0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
39e0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
39f0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
3a00: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
3a10: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
3a20: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
3a30: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
3a40: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
3a50: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
3a60: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
3a70: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
3a80: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  h"..#endif../*.*
3a90: 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f  * The CHECK_FOR_
3aa0: 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20  INTERRUPT macro 
3ab0: 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f  defined here loo
3ac0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
3ad0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  .** sqlite3_inte
3ae0: 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20  rrupt() routine 
3af0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e  has been called.
3b00: 20 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e    If it has been
3b10: 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73  , then.** proces
3b20: 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45  sing of the VDBE
3b30: 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65   program is inte
3b40: 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  rrupted..**.** T
3b50: 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20  his macro added 
3b60: 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63  to every instruc
3b70: 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61  tion that does a
3b80: 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74   jump in order t
3b90: 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61  o.** implement a
3ba0: 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73   loop.  This tes
3bb0: 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20  t used to be on 
3bc0: 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73  every single ins
3bd0: 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74  truction,.** but
3be0: 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d   that meant we m
3bf0: 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74  ore testing that
3c00: 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20   we needed.  By 
3c10: 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65  only testing the
3c20: 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70  .** flag on jump
3c30: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77   instructions, w
3c40: 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20  e get a (small) 
3c50: 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e  speed improvemen
3c60: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48  t..*/.#define CH
3c70: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
3c80: 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75  T \.   if( db->u
3c90: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
3ca0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
3cb0: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a  _to_interrupt;..
3cc0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3cd0: 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66  BUG.static int f
3ce0: 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65  ileExists(sqlite
3cf0: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
3d00: 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74  r *zFile){.  int
3d10: 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20   res = 0;.  int 
3d20: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
3d30: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
3d40: 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72  ST.  /* If we ar
3d50: 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74  e currently test
3d60: 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74  ing IO errors, t
3d70: 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20  hen do not call 
3d80: 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20  OsAccess() to.  
3d90: 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20  ** test for the 
3da0: 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c  presence of zFil
3db0: 65 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  e. This is becau
3dc0: 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20  se any IO error 
3dd0: 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73  that.  ** occurs
3de0: 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62   here will not b
3df0: 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73  e reported, caus
3e00: 69 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20  ing the test to 
3e10: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74  fail..  */.  ext
3e20: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
3e30: 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67  io_error_pending
3e40: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
3e50: 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67  io_error_pending
3e60: 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20  <=0 ).#endif.   
3e70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
3e80: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
3e90: 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43  zFile, SQLITE_AC
3ea0: 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65  CESS_EXISTS, &re
3eb0: 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65  s);.  return (re
3ec0: 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  s && rc==SQLITE_
3ed0: 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  OK);.}.#endif..#
3ee0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3ef0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3f00: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3f10: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3f20: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
3f30: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
3f40: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
3f50: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3f60: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3f70: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3f80: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3f90: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3fa0: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3fb0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3fc0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3fd0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3fe0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3ff0: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
4000: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
4010: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
4020: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
4030: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
4040: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
4050: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
4060: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
4070: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
4080: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
4090: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
40a0: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
40b0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
40c0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
40d0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
40e0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
40f0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
4100: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
4110: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
4120: 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e  can then return.
4130: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64  .**.** sqlite3Vd
4140: 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75  beMakeReady() mu
4150: 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66  st be called bef
4160: 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ore this routine
4170: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
4180: 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61  close the progra
4190: 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f  m with a final O
41a0: 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65  P_Halt and to se
41b0: 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63  t up the callbac
41c0: 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72  ks.** and the er
41d0: 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e  ror message poin
41e0: 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65  ter..**.** Whene
41f0: 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73  ver a row or res
4200: 75 6c 74 20 64 61 74 61 20 69 73 20 61 76 61 69  ult data is avai
4210: 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74  lable, this rout
4220: 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a  ine will either.
4230: 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65  ** invoke the re
4240: 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69  sult callback (i
4250: 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20  f there is one) 
4260: 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a  or return with.*
4270: 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a  * SQLITE_ROW..**
4280: 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70  .** If an attemp
4290: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65  t is made to ope
42a0: 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62  n a locked datab
42b0: 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ase, then this r
42c0: 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65  outine.** will e
42d0: 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  ither invoke the
42e0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28   busy callback (
42f0: 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29  if there is one)
4300: 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72   or it will.** r
4310: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
4320: 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65  Y..**.** If an e
4330: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20  rror occurs, an 
4340: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
4350: 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f   written to memo
4360: 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66  ry obtained.** f
4370: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
4380: 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72  oc() and p->zErr
4390: 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70  Msg is made to p
43a0: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d  oint to that mem
43b0: 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f  ory..** The erro
43c0: 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64  r code is stored
43d0: 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68   in p->rc and th
43e0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
43f0: 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  ns SQLITE_ERROR.
4400: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61  .**.** If the ca
4410: 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74 75  llback ever retu
4420: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
4430: 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65  en the program e
4440: 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  xits.** immediat
4450: 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c  ely.  There will
4460: 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73   be no error mes
4470: 73 61 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e  sage but the p->
4480: 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73  rc field is.** s
4490: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f  et to SQLITE_ABO
44a0: 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  RT and this rout
44b0: 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ine will return 
44c0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a  SQLITE_ERROR..**
44d0: 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c  .** A memory all
44e0: 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61  ocation error ca
44f0: 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65  uses p->rc to be
4500: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e   set to SQLITE_N
4510: 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a  OMEM and this.**
4520: 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75   routine to retu
4530: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
4540: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74  .**.** Other fat
4550: 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e  al errors return
4560: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4570: 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20  *.** After this 
4580: 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69  routine has fini
4590: 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62  shed, sqlite3Vdb
45a0: 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75  eFinalize() shou
45b0: 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ld be.** used to
45c0: 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65   clean up the me
45d0: 73 73 20 74 68 61 74 20 77 61 73 20 6c 65 66 74  ss that was left
45e0: 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20   behind..*/.int 
45f0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
4600: 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20  .  Vdbe *p      
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4620: 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a   The VDBE */.){.
4630: 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20    int pc;       
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4650: 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  The program coun
4660: 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  ter */.  Op *pOp
4670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4680: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4690: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
46a0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
46b0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
46c0: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
46d0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
46e0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
46f0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4700: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
4710: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
4720: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
4730: 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ding */.  Mem *p
4740: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4750: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4760: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4770: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4790: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
47a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
47b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
47c0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
47d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
47e0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
47f0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
4800: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70  erand */.  u8 op
4810: 50 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20  Property;.  int 
4820: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4830: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
4840: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
4850: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
4860: 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65  .  int *aPermute
4870: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
4880: 20 50 65 72 6d 75 61 74 69 6f 6e 20 6f 66 20 63   Permuation of c
4890: 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f  olumns for OP_Co
48a0: 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20  mpare */.#ifdef 
48b0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
48c0: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
48d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
48e0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
48f0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4900: 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b  */.  int origPc;
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74  /* Program count
4930: 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  er at start of o
4940: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4950: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4960: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4970: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f  LBACK.  int nPro
4980: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20  gressOps = 0;   
4990: 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78     /* Opcodes ex
49a0: 65 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f  ecuted since pro
49b0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20  gress callback. 
49c0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 55 6e 70 61  */.#endif.  Unpa
49d0: 63 6b 65 64 52 65 63 6f 72 64 20 61 54 65 6d 70  ckedRecord aTemp
49e0: 52 65 63 5b 31 36 5d 3b 20 2f 2a 20 53 70 61 63  Rec[16]; /* Spac
49f0: 65 20 74 6f 20 68 6f 6c 64 20 61 20 74 72 61 6e  e to hold a tran
4a00: 73 69 65 6e 74 20 55 6e 70 61 63 6b 65 64 52 65  sient UnpackedRe
4a10: 63 6f 72 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72  cord */..  asser
4a20: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4a30: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4a40: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4a50: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4a60: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
4a70: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
4a80: 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73  AGIC_BUSY );.  s
4a90: 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65 78  qlite3BtreeMutex
4aa0: 41 72 72 61 79 45 6e 74 65 72 28 26 70 2d 3e 61  ArrayEnter(&p->a
4ab0: 4d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 2d  Mutex);.  if( p-
4ac0: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4ad0: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4ae0: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4af0: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4b00: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4b10: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4b20: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4b30: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4b40: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4b50: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4b60: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4b70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
4b80: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4b90: 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  Y );.  p->rc = S
4ba0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
4bb0: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4bc0: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4bd0: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4be0: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4bf0: 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46  y = 0;.  CHECK_F
4c00: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
4c10: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4c20: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66  ceSql(p);.#ifdef
4c30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4c40: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
4c50: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
4c60: 28 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26  ( p->pc==0 .   &
4c70: 26 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  & ((p->db->flags
4c80: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4c90: 73 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78  sting) || fileEx
4ca0: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65  ists(db, "vdbe_e
4cb0: 78 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20  xplain")).  ){. 
4cc0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
4cd0: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
4ce0: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
4cf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4d00: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4d10: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4d20: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4d30: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d40: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70  Op(stdout, i, &p
4d50: 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d  ->aOp[i]);.    }
4d60: 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45  .  }.  if( fileE
4d70: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
4d80: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70  trace") ){.    p
4d90: 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74  ->trace = stdout
4da0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4db0: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4dc0: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4dd0: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4de0: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4df0: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4e00: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4e10: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4e20: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4e30: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4e40: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4e50: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4e60: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4e70: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4e80: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e  f.    pOp = &p->
4e90: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4ea0: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4eb0: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4ec0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4ed0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4ee0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4ef0: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4f00: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4f10: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4f20: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4f30: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4f40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4f50: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4f60: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4f70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4f80: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4f90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4fa0: 70 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70  p->trace==0 && p
4fb0: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  c==0 ){.      sq
4fc0: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4fd0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20  Malloc();.      
4fe0: 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64  if( fileExists(d
4ff0: 62 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63  b, "vdbe_sqltrac
5000: 65 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  e") ){.        s
5010: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
5020: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
5030: 20 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42       sqlite3EndB
5040: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
5050: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
5060: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
5070: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
5080: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
5090: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
50a0: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
50b0: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
50c0: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
50d0: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
50e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
50f0: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
5100: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5110: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
5120: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5130: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
5140: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
5150: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
5160: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5170: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5180: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5190: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
51a0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
51b0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
51c0: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
51d0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
51e0: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
51f0: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5200: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
5210: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
5220: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
5230: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
5240: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
5250: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
5260: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
5270: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
5280: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5290: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
52a0: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
52b0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
52c0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
52d0: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
52e0: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
52f0: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
5300: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
5310: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
5320: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
5330: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
5340: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
5350: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
5360: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
5370: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
5380: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
5390: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
53a0: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
53b0: 20 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72      prc =db->xPr
53c0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
53d0: 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20  ressArg);.      
53e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
53f0: 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
5400: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
5410: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66  suse;.        if
5420: 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  ( prc!=0 ){.    
5430: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
5440: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
5450: 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
5460: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
5470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e       }.        n
5480: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
5490: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
54a0: 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20  ProgressOps++;. 
54b0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
54c0: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
54d0: 74 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66  tup processing f
54e0: 6f 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68  or any opcode th
54f0: 61 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20  at is marked.   
5500: 20 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75   ** with the "ou
5510: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
5520: 61 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65  ag.  Such opcode
5530: 73 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a  s have a single.
5540: 20 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68      ** output wh
5550: 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64  ich is specified
5560: 20 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d   by the P2 param
5570: 65 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65  eter.  The P2 re
5580: 67 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73  gister.    ** is
5590: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
55a0: 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20  a NULL..    */. 
55b0: 20 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20     opProperty = 
55c0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  opcodeProperty[p
55d0: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
55e0: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
55f0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5600: 45 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a  ERELEASE)!=0 ){.
5610: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5620: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5630: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5640: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5650: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
5660: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
5670: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
5680: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
5690: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
56a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
56b0: 4e 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 0a  Null;.    }else.
56c0: 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d   .    /* Do comm
56d0: 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63  on setup for opc
56e0: 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68  odes marked with
56f0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
5700: 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d  owing.    ** com
5710: 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f  binations of pro
5720: 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a  perties..    **.
5730: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
5740: 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20   in1.    **     
5750: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20        in1 in2.  
5760: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
5770: 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20  n1 in2 out3.    
5780: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5790: 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20   in3.    **.    
57a0: 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e  ** Variables pIn
57b0: 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e  1, pIn2, and pIn
57c0: 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f  3 are made to po
57d0: 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61  int to appropria
57e0: 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  te.    ** regist
57f0: 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20  ers for inputs. 
5800: 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70   Variable pOut p
5810: 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74  oints to the out
5820: 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20  put register..  
5830: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70    */.    if( (op
5840: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5850: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5860: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5870: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5880: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5890: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
58a0: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
58b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52  Op->p1];.      R
58c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
58d0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
58e0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
58f0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5900: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5910: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5920: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5930: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5940: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
5950: 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
5960: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
5970: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5980: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5990: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 70  .        if( (op
59a0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
59b0: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
59c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
59d0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
59e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59f0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5a00: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75 74  ;.          pOut
5a10: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5a20: 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  >p3];.        }.
5a30: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
5a40: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5a50: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
5a60: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5a70: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5a80: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5a90: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5aa0: 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26          pIn3 = &
5ab0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5ac0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5ad0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5ae0: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d  , pIn3);.      }
5af0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5b00: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5b10: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5b20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5b30: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5b40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5b50: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5b60: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
5b70: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5b80: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5b90: 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a  pOp->p2, pIn2);.
5ba0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f      }else if( (o
5bb0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5bc0: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5bd0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5be0: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5bf0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5c00: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5c10: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
5c20: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
5c30: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5c40: 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20  Op->p3, pIn3);. 
5c50: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
5c60: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5c70: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5c80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ca0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5cb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5cc0: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5cd0: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5ce0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5cf0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5d00: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5d10: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5d20: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5d30: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5d40: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5d50: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5d60: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5d70: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5d80: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5d90: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5da0: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5db0: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5dc0: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5dd0: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5de0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5df0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5e00: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5e10: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5e20: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5e30: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5e40: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5e50: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5e60: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5e70: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5e80: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5e90: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5ea0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5eb0: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5ec0: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5ed0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5ee0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5ef0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5f00: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5f10: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5f20: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5f30: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5f40: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5f50: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5f60: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5f70: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5f80: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5f90: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5fa0: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5fb0: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5fc0: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5fd0: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5fe0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5ff0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
6000: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
6010: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
6020: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
6030: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
6040: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
6050: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
6060: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
6070: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
6080: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
6090: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
60a0: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
60b0: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
60c0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
60d0: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
60e0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
60f0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
6100: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
6110: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
6120: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
6130: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
6140: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
6150: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
6160: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
6170: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
6180: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
6190: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
61a0: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
61b0: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
61c0: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
61d0: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
61e0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
61f0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
6200: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
6210: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
6220: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
6230: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
6240: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
6250: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
6260: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
6270: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6280: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6290: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
62a0: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
62b0: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
62c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
62d0: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
62e0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
62f0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
6300: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
6310: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
6320: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
6330: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6340: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6350: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6360: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6370: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6380: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63d0: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
63e0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
63f0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
6400: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
6410: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
6420: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6430: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6440: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6450: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6460: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6470: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6480: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
6490: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
64a0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
64b0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
64c0: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
64d0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
64e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
64f0: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6500: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6510: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6520: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6530: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6540: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6550: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
6560: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
6570: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6580: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6590: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
65a0: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
65b0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
65c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
65d0: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
65e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
65f0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6600: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6610: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6620: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6630: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6640: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
6650: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6660: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
6670: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6680: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6690: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
66a0: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
66b0: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
66c0: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
66d0: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
66e0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
66f0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6700: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6710: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
6720: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
6730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6740: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
6760: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
6770: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
6780: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6790: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
67a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
67b0: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
67c0: 44 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28 20  Dest;.  assert( 
67d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
67e0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
67f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6800: 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20  M_Int;.  pcDest 
6810: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6820: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6830: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6840: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6850: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65  n1);.  pc = pcDe
6860: 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  st;.  break;.}..
6870: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
6880: 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  t P1 P2 * P4 *.*
6890: 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69  *.** Exit immedi
68a0: 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e  ately.  All open
68b0: 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72   cursors, etc ar
68c0: 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f  e closed.** auto
68d0: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  matically..**.**
68e0: 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c   P1 is the resul
68f0: 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  t code returned 
6900: 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  by sqlite3_exec(
6910: 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ), sqlite3_reset
6920: 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65  (),.** or sqlite
6930: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46  3_finalize().  F
6940: 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74  or a normal halt
6950: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  , this should be
6960: 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a   SQLITE_OK (0)..
6970: 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69  ** For errors, i
6980: 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74  t can be some ot
6990: 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50  her value.  If P
69a0: 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c  1!=0 then P2 wil
69b0: 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  l determine.** w
69c0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f  hether or not to
69d0: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75   rollback the cu
69e0: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
69f0: 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62  n.  Do not rollb
6a00: 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45  ack.** if P2==OE
6a10: 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f  _Fail. Do the ro
6a20: 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45  llback if P2==OE
6a30: 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50  _Rollback.  If P
6a40: 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20  2==OE_Abort,.** 
6a50: 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c  then back out al
6a60: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
6a70: 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72  ave occurred dur
6a80: 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69  ing this executi
6a90: 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  on of the.** VDB
6aa0: 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f  E, but do not ro
6ab0: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
6ac0: 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49  action. .**.** I
6ad0: 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  f P4 is not null
6ae0: 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65   then it is an e
6af0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
6b00: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ing..**.** There
6b10: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
6b20: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
6b30: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
6b40: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
6b50: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
6b60: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
6b70: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
6b80: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
6b90: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
6ba0: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
6bb0: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
6bc0: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
6bd0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
6be0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
6bf0: 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
6c00: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 66   = pOp->p2;.  if
6c10: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
6c20: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
6c30: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
6c40: 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e   db, "%s", pOp->
6c50: 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72 63 20  p4.z);.  }.  rc 
6c60: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  = sqlite3VdbeHal
6c70: 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t(p);.  assert( 
6c80: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
6c90: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
6ca0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
6cb0: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
6cc0: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
6cd0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
6ce0: 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e  se{.    rc = p->
6cf0: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
6d00: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
6d10: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
6d20: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
6d30: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
6d40: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6d50: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
6d60: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
6d70: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
6d80: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
6d90: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
6da0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
6db0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
6dc0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
6dd0: 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75  M_Int;.  pOut->u
6de0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
6df0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6e00: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
6e10: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
6e20: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
6e30: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
6e40: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
6e50: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
6e60: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6e70: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
6e80: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
6e90: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
6ea0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6eb0: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
6ec0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
6ed0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Int;.  pOut->
6ee0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
6ef0: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
6f00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
6f10: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
6f20: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
6f30: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
6f40: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
6f50: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
6f60: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
6f70: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
6f80: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
6f90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
6fa0: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
6fb0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
6fc0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6fd0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73   MEM_Real;.  ass
6fe0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e  ert( !sqlite3IsN
6ff0: 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61  aN(*pOp->p4.pRea
7000: 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20  l) );.  pOut->r 
7010: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
7020: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7030: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38   Opcode: String8
7040: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
7050: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
7060: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
7070: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
7080: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
7090: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
70a0: 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20  to an OP_String 
70b0: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
70c0: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
70d0: 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73  rst time..*/.cas
70e0: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
70f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7100: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
7110: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7120: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7130: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70  p4.z!=0 );.  pOp
7140: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
7150: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
7160: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
7170: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
7180: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7190: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
71a0: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
71b0: 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  UTF8 ){.    sqli
71c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
71d0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
71e0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
71f0: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
7200: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
7210: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
7220: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
7230: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
7240: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
7250: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
7260: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  !=sqlite3VdbeMem
7270: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 4f  MakeWriteable(pO
7280: 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ut) ) goto no_me
7290: 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  m;.    pOut->zMa
72a0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
72b0: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
72c0: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
72d0: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
72e0: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
72f0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
7300: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
7310: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
7320: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
7330: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
7340: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
7350: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
7360: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
7370: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7380: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
7390: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
73a0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
73b0: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
73c0: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
73d0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
73e0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 20  BSIZE(pOut);.   
73f0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7400: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
7410: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7420: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7430: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7440: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7450: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7460: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7470: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7480: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7490: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
74a0: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
74b0: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
74c0: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
74d0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
74e0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
74f0: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
7500: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7510: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
7520: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
7530: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
7540: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
7550: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
7560: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7570: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7580: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7590: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
75a0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
75b0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
75c0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
75d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
75e0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
75f0: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
7600: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7610: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
7620: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
7630: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7640: 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
7650: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
7660: 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a  P1 P2 * P4.**.**
7670: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
7680: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
7690: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
76a0: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
76b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
76c0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
76d0: 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20 64 69   is not coded di
76e0: 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68 65  rectly.** by the
76f0: 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74 65   compiler. Inste
7700: 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65 72  ad, the compiler
7710: 20 6c 61 79 65 72 20 73 70 65 63 69 66 69 65 73   layer specifies
7720: 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c 6f  .** an OP_HexBlo
7730: 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68 20 74  b opcode, with t
7740: 68 65 20 68 65 78 20 73 74 72 69 6e 67 20 72 65  he hex string re
7750: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a  presentation of.
7760: 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73 20 50  ** the blob as P
7770: 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  4. This opcode i
7780: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74 6f  s transformed to
7790: 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74   an OP_Blob.** t
77a0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 69 74  he first time it
77b0: 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a 2a 2f   is executed..*/
77c0: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
77f0: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7800: 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54  pOp->p1 <= SQLIT
7810: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a  E_MAX_LENGTH );.
7820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7830: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
7840: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
7850: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
7860: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
7870: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7880: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
7890: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
78a0: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
78b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
78c0: 68 65 20 76 61 6c 75 65 20 6f 66 20 76 61 72 69  he value of vari
78d0: 61 62 6c 65 20 50 31 20 69 73 20 77 72 69 74 74  able P1 is writt
78e0: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
78f0: 20 50 32 2e 20 41 20 76 61 72 69 61 62 6c 65 20   P2. A variable 
7900: 69 73 0a 2a 2a 20 61 6e 20 75 6e 6b 6e 6f 77 6e  is.** an unknown
7910: 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
7920: 20 53 51 4c 20 73 74 72 69 6e 67 20 61 73 20 68   SQL string as h
7930: 61 6e 64 65 64 20 74 6f 20 73 71 6c 69 74 65 33  anded to sqlite3
7940: 5f 63 6f 6d 70 69 6c 65 28 29 2e 0a 2a 2a 20 41  _compile()..** A
7950: 6e 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  ny occurrence of
7960: 20 74 68 65 20 27 3f 27 20 63 68 61 72 61 63 74   the '?' charact
7970: 65 72 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  er in the origin
7980: 61 6c 20 53 51 4c 20 69 73 20 63 6f 6e 73 69 64  al SQL is consid
7990: 65 72 65 64 0a 2a 2a 20 61 20 76 61 72 69 61 62  ered.** a variab
79a0: 6c 65 2e 20 20 56 61 72 69 61 62 6c 65 73 20 69  le.  Variables i
79b0: 6e 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e 67  n the SQL string
79c0: 20 61 72 65 20 6e 75 6d 62 65 72 20 66 72 6f 6d   are number from
79d0: 20 6c 65 66 74 20 74 6f 0a 2a 2a 20 72 69 67 68   left to.** righ
79e0: 74 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  t beginning with
79f0: 20 31 2e 20 20 54 68 65 20 76 61 6c 75 65 73 20   1.  The values 
7a00: 6f 66 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  of variables are
7a10: 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 0a 2a   set using the.*
7a20: 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  * sqlite3_bind()
7a30: 20 41 50 49 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   API..*/.case OP
7a40: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
7a50: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7a60: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
7a70: 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e 70 31 20 2d  nt j = pOp->p1 -
7a80: 20 31 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   1;.  Mem *pVar;
7a90: 0a 20 20 61 73 73 65 72 74 28 20 6a 3e 3d 30 20  .  assert( j>=0 
7aa0: 26 26 20 6a 3c 70 2d 3e 6e 56 61 72 20 29 3b 0a  && j<p->nVar );.
7ab0: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
7ac0: 61 72 5b 6a 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ar[j];.  if( sql
7ad0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
7ae0: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67  g(pVar) ){.    g
7af0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
7b00: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
7b10: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
7b20: 74 2c 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 2c 20  t, &p->aVar[j], 
7b30: 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55  MEM_Static);.  U
7b40: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7b50: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7b60: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7b70: 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a   Move P1 P2 P3 *
7b80: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
7b90: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
7ba0: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
7bb0: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
7bc0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
7bd0: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
7be0: 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a  P1..P1+P1-1 are.
7bf0: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
7c00: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
7c10: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
7c20: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
7c30: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
7c40: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
7c50: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
7c60: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
7c70: 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 69 6e 74   *zMalloc;.  int
7c80: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
7c90: 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
7ca0: 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70  ;.  int p2 = pOp
7cb0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7cc0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
7cd0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
7ce0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
7cf0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
7d00: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b   = &p->aMem[p1];
7d10: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
7d20: 65 6d 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28  em[p2];.  while(
7d30: 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65   n-- ){.    asse
7d40: 72 74 28 20 70 4f 75 74 3c 3d 26 70 2d 3e 61 4d  rt( pOut<=&p->aM
7d50: 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20  em[p->nMem] );. 
7d60: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
7d70: 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  =&p->aMem[p->nMe
7d80: 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  m] );.    zMallo
7d90: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
7da0: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
7db0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
7dc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
7dd0: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20  (pOut, pIn1);.  
7de0: 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20    pIn1->zMalloc 
7df0: 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52  = zMalloc;.    R
7e00: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
7e10: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
7e20: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
7e30: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
7e40: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
7e50: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
7e60: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
7e70: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
7e80: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7e90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
7ea0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
7eb0: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
7ec0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
7ed0: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
7ee0: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
7ef0: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
7f00: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
7f10: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
7f20: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
7f30: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
7f40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
7f50: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
7f60: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
7f70: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
7f80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
7f90: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
7fa0: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
7fb0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
7fc0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
7fd0: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65  EM_Ephem);.  Dee
7fe0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
7ff0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
8000: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8010: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8020: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
8030: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8040: 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f  ** Make a shallo
8050: 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  w copy of regist
8060: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8070: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
8080: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
8090: 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63  akes a shallow c
80a0: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
80b0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
80c0: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  ** is a string o
80d0: 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65  r blob, then the
80e0: 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20   copy is only a 
80f0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a  pointer to the.*
8100: 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68  * original and h
8110: 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67  ence if the orig
8120: 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20  inal changes so 
8130: 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a  will the copy..*
8140: 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20  * Worse, if the 
8150: 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c  original is deal
8160: 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70  located, the cop
8170: 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69  y becomes invali
8180: 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70  d..** Thus the p
8190: 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72  rogram must guar
81a0: 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f  antee that the o
81b0: 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74  riginal will not
81c0: 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e   change.** durin
81d0: 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f  g the lifetime o
81e0: 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65  f the copy.  Use
81f0: 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65   OP_Copy to make
8200: 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63   a complete.** c
8210: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
8220: 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  SCopy: {        
8230: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
8240: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8250: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
8260: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
8270: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8280: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
8290: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   );.  pOut = &p-
82a0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
82b0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
82c0: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
82d0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
82e0: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
82f0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45  MEM_Ephem);.  RE
8300: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8310: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
8320: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8330: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
8340: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8350: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
8360: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
8370: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
8380: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
8390: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
83a0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
83b0: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
83c0: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
83d0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
83e0: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
83f0: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
8400: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
8410: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
8420: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
8430: 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75   the top P1 valu
8440: 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  es as the result
8450: 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  .** row..*/.case
8460: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
8470: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
8480: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
8490: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
84a0: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
84b0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
84c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
84d0: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  >p1+pOp->p2<=p->
84e0: 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20  nMem+1 );..  /* 
84f0: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
8500: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
8510: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
8520: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
8530: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
8540: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
8550: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
8560: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
8570: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
8580: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
8590: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
85a0: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
85b0: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
85c0: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
85d0: 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a  as side effect..
85e0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
85f0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 70  >pResultSet = &p
8600: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
8610: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
8620: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
8630: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8640: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
8650: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65  m[i]);.    store
8660: 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69  TypeInfo(&pMem[i
8670: 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
8680: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8690: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
86a0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
86b0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
86c0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
86d0: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
86e0: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
86f0: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
8700: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
8710: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
8720: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
8730: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
8740: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
8750: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
8760: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
8770: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
8780: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
8790: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
87a0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
87b0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
87c0: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
87d0: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
87e0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
87f0: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
8800: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
8810: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
8820: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
8830: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
8840: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
8850: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
8860: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
8870: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
8880: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
8890: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
88a0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
88b0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
88c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
88d0: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
88e0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
88f0: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
8900: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ;..  assert( pIn
8910: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
8920: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
8930: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
8940: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
8950: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8960: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
8970: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 45 78 70  break;.  }.  Exp
8980: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
8990: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
89a0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 45 78   encoding);.  Ex
89b0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
89c0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
89d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
89e0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
89f0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
8a00: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
8a10: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
8a20: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
8a30: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8a40: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
8a50: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
8a60: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
8a70: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
8a80: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
8a90: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
8aa0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
8ab0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
8ac0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
8ad0: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
8ae0: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
8af0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
8b00: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
8b10: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
8b20: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
8b30: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
8b40: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
8b50: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
8b60: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8b70: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
8b80: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
8b90: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8ba0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8bb0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8bc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
8bd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8be0: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
8bf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8c00: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
8c10: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
8c20: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8c30: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8c40: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8c50: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8c60: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c70: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8c80: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
8c90: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
8ca0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
8cb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8cc0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
8cd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8ce0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
8cf0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
8d00: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
8d10: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
8d20: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
8d30: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
8d40: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
8d50: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
8d60: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
8d70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8d80: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
8d90: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
8da0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
8db0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
8dc0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
8dd0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
8de0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
8df0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
8e00: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
8e10: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
8e20: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
8e30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
8e40: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
8e50: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
8e60: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
8e70: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
8e80: 20 50 33 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P3.  If the val
8e90: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
8ea0: 32 0a 2a 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68  2.** is zero, th
8eb0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
8ec0: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
8ed0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
8ee0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
8ef0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
8f00: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
8f10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8f20: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65  * Compute the re
8f30: 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e  mainder after in
8f40: 74 65 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f  teger division o
8f50: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a  f the value in.*
8f60: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  * register P1 by
8f70: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8f80: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
8f90: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8fa0: 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  n P3. .** If the
8fb0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8fc0: 65 72 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68  er P2 is zero th
8fd0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8fe0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
8ff0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
9000: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9010: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
9020: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
9030: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9040: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
9050: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9060: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
9070: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
9080: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
9090: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
90a0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
90b0: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
90c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
90d0: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
90e0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
90f0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
9100: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9110: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
9120: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9130: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
9140: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
9150: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
9160: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9170: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
9180: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
9190: 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 61 70  nity(pIn1);.  ap
91a0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
91b0: 74 79 28 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67  ty(pIn2);.  flag
91c0: 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  s = pIn1->flags 
91d0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20  | pIn2->flags;. 
91e0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
91f0: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74  M_Null)!=0 ) got
9200: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9210: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69  ult_is_null;.  i
9220: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
9230: 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  & pIn2->flags & 
9240: 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e  MEM_Int)==MEM_In
9250: 74 20 29 7b 0a 20 20 20 20 69 36 34 20 61 2c 20  t ){.    i64 a, 
9260: 62 3b 0a 20 20 20 20 61 20 3d 20 70 49 6e 31 2d  b;.    a = pIn1-
9270: 3e 75 2e 69 3b 0a 20 20 20 20 62 20 3d 20 70 49  >u.i;.    b = pI
9280: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69  n2->u.i;.    swi
9290: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
92a0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
92b0: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 62  P_Add:         b
92c0: 20 2b 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   += a;       bre
92d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
92e0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 62  P_Subtract:    b
92f0: 20 2d 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   -= a;       bre
9300: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9310: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62  P_Multiply:    b
9320: 20 2a 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   *= a;       bre
9330: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9340: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
9350: 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20 67      if( a==0 ) g
9360: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9370: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9380: 20 20 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69         /* Dividi
9390: 6e 67 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ng the largest p
93a0: 6f 73 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65  ossible negative
93b0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
93c0: 28 31 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20  (1<<63) by .    
93d0: 20 20 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e      ** -1 return
93e0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f  s an integer too
93f0: 20 6c 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20   large to store 
9400: 69 6e 20 61 20 36 34 2d 62 69 74 20 64 61 74 61  in a 64-bit data
9410: 2d 74 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20  -type. On.      
9420: 20 20 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74    ** some archit
9430: 65 63 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c  ectures, the val
9440: 75 65 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20  ue overflows to 
9450: 28 31 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65  (1<<63). On othe
9460: 72 73 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  rs,.        ** a
9470: 20 53 49 47 46 50 45 20 69 73 20 69 73 73 75 65   SIGFPE is issue
9480: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
9490: 20 73 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61   statement norma
94a0: 6c 69 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20  lizes this.     
94b0: 20 20 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73     ** behavior s
94c0: 6f 20 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69  o that all archi
94d0: 74 65 63 74 75 72 65 73 20 62 65 68 61 76 65 20  tectures behave 
94e0: 61 73 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20  as if integer . 
94f0: 20 20 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c         ** overfl
9500: 6f 77 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20  ow occurred..   
9510: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
9520: 69 66 28 20 61 3d 3d 2d 31 20 26 26 20 62 3d 3d  if( a==-1 && b==
9530: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
9540: 20 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20   a = 1;.        
9550: 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20  b /= a;.        
9560: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9570: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
9580: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30          if( a==0
9590: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
95a0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
95b0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  l;.        if( a
95c0: 3d 3d 2d 31 20 29 20 61 20 3d 20 31 3b 0a 20 20  ==-1 ) a = 1;.  
95d0: 20 20 20 20 20 20 62 20 25 3d 20 61 3b 0a 20 20        b %= a;.  
95e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
95f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
9600: 4f 75 74 2d 3e 75 2e 69 20 3d 20 62 3b 0a 20 20  Out->u.i = b;.  
9610: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
9620: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
9630: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 6f  .  }else{.    do
9640: 75 62 6c 65 20 61 2c 20 62 3b 0a 20 20 20 20 61  uble a, b;.    a
9650: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9660: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
9670: 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64     b = sqlite3Vd
9680: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
9690: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
96a0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
96b0: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
96c0: 20 20 20 20 20 20 20 20 20 62 20 2b 3d 20 61 3b           b += a;
96d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
96e0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
96f0: 72 61 63 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b  ract:    b -= a;
9700: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9710: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
9720: 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b  iply:    b *= a;
9730: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9740: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
9750: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
9760: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
9770: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
9780: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
9790: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
97a0: 66 28 20 61 3d 3d 28 64 6f 75 62 6c 65 29 30 20  f( a==(double)0 
97b0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
97c0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
97d0: 3b 0a 20 20 20 20 20 20 20 20 62 20 2f 3d 20 61  ;.        b /= a
97e0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
97f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
9800: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
9810: 20 20 69 36 34 20 69 61 20 3d 20 28 69 36 34 29    i64 ia = (i64)
9820: 61 3b 0a 20 20 20 20 20 20 20 20 69 36 34 20 69  a;.        i64 i
9830: 62 20 3d 20 28 69 36 34 29 62 3b 0a 20 20 20 20  b = (i64)b;.    
9840: 20 20 20 20 69 66 28 20 69 61 3d 3d 30 20 29 20      if( ia==0 ) 
9850: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9860: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9870: 20 20 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d          if( ia==
9880: 2d 31 20 29 20 69 61 20 3d 20 31 3b 0a 20 20 20  -1 ) ia = 1;.   
9890: 20 20 20 20 20 62 20 3d 20 28 64 6f 75 62 6c 65       b = (double
98a0: 29 28 69 62 20 25 20 69 61 29 3b 0a 20 20 20 20  )(ib % ia);.    
98b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
98c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
98d0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 62 29   sqlite3IsNaN(b)
98e0: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
98f0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9900: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
9910: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 62 3b      pOut->r = b;
9920: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9930: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
9940: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c  al);.    if( (fl
9950: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
9960: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
9970: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
9980: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
9990: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
99a0: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
99b0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
99c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
99d0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
99e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
99f0: 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50  e: CollSeq * * P
9a00: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
9a10: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
9a20: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
9a30: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
9a40: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
9a50: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
9a60: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
9a70: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
9a80: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
9a90: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
9aa0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
9ab0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
9ac0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
9ad0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
9ae0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
9af0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ..**.** The inte
9b00: 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68  rface used by th
9b10: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
9b20: 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e   of the aforemen
9b30: 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  tioned functions
9b40: 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20  .** to retrieve 
9b50: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
9b60: 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
9b70: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74  is opcode is not
9b80: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75   available.** pu
9b90: 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20  blicly, only to 
9ba0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64  user functions d
9bb0: 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63  efined in func.c
9bc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
9bd0: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
9be0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
9bf0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62  4_COLLSEQ );.  b
9c00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9c10: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
9c20: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
9c30: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
9c40: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
9c50: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
9c60: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
9c70: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
9c80: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
9c90: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
9ca0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
9cb0: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
9cc0: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
9cd0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
9ce0: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
9cf0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
9d00: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
9d10: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
9d20: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
9d30: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
9d40: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
9d50: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
9d60: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
9d70: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
9d80: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
9d90: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
9da0: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
9db0: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
9dc0: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
9dd0: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
9de0: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
9df0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
9e00: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
9e10: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
9e20: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
9e30: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
9e40: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
9e50: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
9e60: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
9e70: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
9e80: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
9e90: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
9ea0: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
9eb0: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
9ec0: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
9ed0: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
9ee0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
9ef0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
9f00: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
9f10: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
9f20: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
9f30: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
9f40: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70  Val;.  int n = p
9f50: 4f 70 2d 3e 70 35 3b 0a 0a 20 20 61 70 56 61 6c  Op->p5;..  apVal
9f60: 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
9f70: 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
9f80: 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72  n==0 );..  asser
9f90: 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
9fa0: 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
9fb0: 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29  +n<=p->nMem+1) )
9fc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9fd0: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
9fe0: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
9ff0: 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 70  n );.  pArg = &p
a000: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
a010: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
a020: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
a030: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
a040: 72 67 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  rg;.    storeTyp
a050: 65 49 6e 66 6f 28 70 41 72 67 2c 20 65 6e 63 6f  eInfo(pArg, enco
a060: 64 69 6e 67 29 3b 0a 20 20 20 20 52 45 47 49 53  ding);.    REGIS
a070: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a080: 32 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  2, pArg);.  }.. 
a090: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a0a0: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
a0b0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
a0c0: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
a0d0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
a0e0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
a0f0: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
a100: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
a110: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
a120: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
a130: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
a140: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
a150: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
a160: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
a170: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
a180: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61  >pFunc;.  }..  a
a190: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
a1a0: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
a1b0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
a1c0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
a1d0: 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  3];.  ctx.s.flag
a1e0: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
a1f0: 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
a200: 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
a210: 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63  .  ctx.s.zMalloc
a220: 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20   = 0;..  /* The 
a230: 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
a240: 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
a250: 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
a260: 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70   Move.  ** the p
a270: 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20  ointer to ctx.s 
a280: 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
a290: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ser-function can
a2a0: 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c   use.  ** the al
a2b0: 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
a2c0: 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
a2d0: 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e  f allocating a n
a2e0: 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
a2f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
a300: 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b  e(&ctx.s, pOut);
a310: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
a320: 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75  g(&ctx.s, MEM_Nu
a330: 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72  ll);..  ctx.isEr
a340: 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  ror = 0;.  if( c
a350: 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
a360: 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
a370: 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
a380: 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
a390: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a3a0: 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
a3b0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
a3c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
a3d0: 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
a3e0: 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
a3f0: 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
a400: 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
a410: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
a420: 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
a430: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
a440: 75 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75  use;.  (*ctx.pFu
a450: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
a460: 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66   n, apVal);.  if
a470: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
a480: 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c  n(db) ){.    sql
a490: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
a4a0: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
a4b0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a4c0: 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20  o_misuse;.  }.  
a4d0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
a4e0: 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45  iled ){.    /* E
a4f0: 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c  ven though a mal
a500: 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64  loc() has failed
a510: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
a520: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20  tion of the.    
a530: 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ** user function
a540: 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64   may have called
a550: 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75   an sqlite3_resu
a560: 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f  lt_XXX() functio
a570: 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75  n.    ** to retu
a580: 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20  rn a value. The 
a590: 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72  following call r
a5a0: 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f  eleases any reso
a5b0: 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73  urces.    ** ass
a5c0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63  ociated with suc
a5d0: 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  h a value..    *
a5e0: 2a 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d  *.    ** Note: M
a5f0: 61 79 62 65 20 4d 65 6d 52 65 6c 65 61 73 65 28  aybe MemRelease(
a600: 29 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c  ) should be call
a610: 65 64 20 69 66 20 73 71 6c 69 74 65 33 53 61 66  ed if sqlite3Saf
a620: 65 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66  etyOn().    ** f
a630: 61 69 6c 73 20 61 6c 73 6f 20 28 74 68 65 20 69  ails also (the i
a640: 66 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74  f(...) statement
a650: 20 61 62 6f 76 65 29 2e 20 42 75 74 20 69 66 20   above). But if 
a660: 70 65 6f 70 6c 65 20 61 72 65 0a 20 20 20 20 2a  people are.    *
a670: 2a 20 6d 69 73 75 73 69 6e 67 20 73 71 6c 69 74  * misusing sqlit
a680: 65 2c 20 74 68 65 79 20 68 61 76 65 20 62 69 67  e, they have big
a690: 67 65 72 20 70 72 6f 62 6c 65 6d 73 20 74 68 61  ger problems tha
a6a0: 6e 20 61 20 6c 65 61 6b 65 64 20 76 61 6c 75 65  n a leaked value
a6b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
a6c0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
a6d0: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
a6e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
a6f0: 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75  ..  /* If any au
a700: 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e  xiliary data fun
a710: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
a720: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
a730: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
a740: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
a750: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
a760: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
a770: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
a780: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
a790: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
a7a0: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
a7b0: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
a7c0: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
a7d0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64  .    pOp->p4.pVd
a7e0: 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  beFunc = ctx.pVd
a7f0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d  beFunc;.    pOp-
a800: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42  >p4type = P4_VDB
a810: 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  EFUNC;.  }..  /*
a820: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
a830: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
a840: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
a850: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
a860: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
a870: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
a880: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
a890: 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
a8a0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63  e3_value_text(&c
a8b0: 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d  tx.s));.    rc =
a8c0: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
a8d0: 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
a8e0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
a8f0: 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67  unction into reg
a900: 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71  ister P3 */.  sq
a910: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
a920: 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20  ncoding(&ctx.s, 
a930: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c  encoding);.  sql
a940: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
a950: 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20  pOut, &ctx.s);. 
a960: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a970: 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20  MemTooBig(pOut) 
a980: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
a990: 62 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  big;.  }.  REGIS
a9a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a9b0: 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
a9c0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
a9d0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a9e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
a9f0: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
aa00: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
aa10: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
aa20: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
aa30: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
aa40: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
aa50: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
aa60: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
aa70: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
aa80: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
aa90: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
aaa0: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
aab0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
aac0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
aad0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
aae0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
aaf0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
ab00: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
ab10: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ab20: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
ab30: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ab40: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ab50: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ab60: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
ab70: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69  P3 * *.**.** Shi
ab80: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
ab90: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
aba0: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
abb0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
abc0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
abd0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
abe0: 72 20 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e  r in regiser P1.
abf0: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
ac00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ac10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ac20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ac30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ac40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ac50: 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31  e: ShiftRight P1
ac60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ac70: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
ac80: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
ac90: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
aca0: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
acb0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
acc0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
acd0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
ace0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
acf0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ad00: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ad10: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ad20: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ad30: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
ad40: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ad60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
ad70: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
ad80: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
ad90: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
ada0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
adb0: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
adc0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
add0: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
adf0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
ae00: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
ae10: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
ae20: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
ae30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ae40: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
ae50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
ae60: 36 34 20 61 2c 20 62 3b 0a 0a 20 20 69 66 28 20  64 a, b;..  if( 
ae70: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
ae80: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
ae90: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
aea0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
aeb0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
aec0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20  reak;.  }.  a = 
aed0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
aee0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d  lue(pIn2);.  b =
aef0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
af00: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77  alue(pIn1);.  sw
af10: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
af20: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
af30: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20  _BitAnd:      a 
af40: 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b  &= b;     break;
af50: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
af60: 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62  Or:       a |= b
af70: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
af80: 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65   case OP_ShiftLe
af90: 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20  ft:   a <<= b;  
afa0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
afb0: 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70  ault:  assert( p
afc0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
afd0: 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20  hiftRight );.   
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20        a >>= b;  
b000: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
b010: 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20  Out->u.i = a;.  
b020: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b030: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
b040: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b050: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
b060: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
b070: 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e   Add the constan
b080: 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75  t P2 to the valu
b090: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b0a0: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
b0b0: 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74  is always an int
b0c0: 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66  eger..**.** To f
b0d0: 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65  orce any registe
b0e0: 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  r to be an integ
b0f0: 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a  er, just add 0..
b100: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d  */.case OP_AddIm
b110: 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  m: {            
b120: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71 6c 69  /* in1 */.  sqli
b130: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
b140: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
b150: 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
b160: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
b170: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42  /* Opcode: MustB
b180: 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  eInt P1 P2 * * *
b190: 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68  .** .** Force th
b1a0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b1b0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
b1c0: 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
b1d0: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
b1e0: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
b1f0: 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  r and cannot be 
b200: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
b210: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74  n integer.** wit
b220: 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20  hout data loss, 
b230: 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
b240: 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20  ately to P2, or 
b250: 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73  if P2==0.** rais
b260: 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d  e an SQLITE_MISM
b270: 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a  ATCH exception..
b280: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42  */.case OP_MustB
b290: 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  eInt: {         
b2a0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
b2b0: 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  */.  applyAffini
b2c0: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
b2d0: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
b2e0: 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70  oding);.  if( (p
b2f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
b300: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
b310: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
b320: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
b330: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20  ITE_MISMATCH;.  
b340: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
b350: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
b360: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63   }else{.      pc
b370: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
b380: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
b390: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
b3a0: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
b3b0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
b3c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
b3d0: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
b3e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
b3f0: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
b400: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
b410: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
b420: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
b430: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
b440: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
b450: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
b460: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
b470: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
b480: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
b490: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
b4a0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
b4b0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
b4c0: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
b4d0: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
b4e0: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
b4f0: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
b500: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
b510: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
b520: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  /* in1 */.  if( 
b550: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b560: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
b570: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
b580: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
b590: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
b5a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
b5b0: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  ST./* Opcode: To
b5c0: 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Text P1 * * * *.
b5d0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
b5e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b5f0: 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e  r P1 to be text.
b600: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
b610: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
b620: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
b630: 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ing using the.**
b640: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70   equivalent of p
b650: 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76  rintf().  Blob v
b660: 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e  alues are unchan
b670: 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61  ged and.** are a
b680: 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79  fterwards simply
b690: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
b6a0: 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  text..**.** A NU
b6b0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
b6c0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
b6d0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
b6e0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
b6f0: 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20  se OP_ToText: { 
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b710: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
b720: 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20  O_TEXT, in1 */. 
b730: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
b740: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
b750: 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d  eak;.  assert( M
b760: 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f  EM_Str==(MEM_Blo
b770: 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d  b>>3) );.  pIn1-
b780: 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d  >flags |= (pIn1-
b790: 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29  >flags&MEM_Blob)
b7a0: 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69  >>3;.  applyAffi
b7b0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
b7c0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
b7d0: 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78  ding);.  rc = Ex
b7e0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
b7f0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
b800: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
b810: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
b820: 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  led );.  pIn1->f
b830: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e  lags &= ~(MEM_In
b840: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42  t|MEM_Real|MEM_B
b850: 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20  lob|MEM_Zero);. 
b860: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b870: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
b880: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b890: 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a  e: ToBlob P1 * *
b8a0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
b8b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b8c0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
b8d0: 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68  a BLOB..** If th
b8e0: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
b8f0: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
b900: 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74  o a string first
b910: 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65  ..** Strings are
b920: 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70   simply reinterp
b930: 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77  reted as blobs w
b940: 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a  ith no change.**
b950: 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69   to the underlyi
b960: 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41  ng data..**.** A
b970: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
b980: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
b990: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
b9a0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
b9b0: 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a  .case OP_ToBlob:
b9c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
b9d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b9e0: 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a  K_TO_BLOB, in1 *
b9f0: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
ba00: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
ba10: 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70   break;.  if( (p
ba20: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ba30: 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
ba40: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
ba50: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
ba60: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
ba70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
ba80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
ba90: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
baa0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65  Failed );.    Me
bab0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
bac0: 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  1, MEM_Blob);.  
bad0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d  }else{.    pIn1-
bae0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
baf0: 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c  TypeMask&~MEM_Bl
bb00: 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ob);.  }.  UPDAT
bb10: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
bb20: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
bb30: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e  ../* Opcode: ToN
bb40: 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20  umeric P1 * * * 
bb50: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
bb60: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bb70: 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d  ter P1 to be num
bb80: 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a  eric (either an.
bb90: 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  ** integer or a 
bba0: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e  floating-point n
bbb0: 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68  umber.).** If th
bbc0: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
bbd0: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
bbe0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
bbf0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
bc00: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
bc10: 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64  () or atof() and
bc20: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
bc30: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a  uch conversion .
bc40: 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  ** is possible..
bc50: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
bc60: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
bc70: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
bc80: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
bc90: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
bca0: 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20  ToNumeric: {    
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bcc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e   same as TK_TO_N
bcd0: 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20  UMERIC, in1 */. 
bce0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
bcf0: 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  s & (MEM_Null|ME
bd00: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
bd10: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
bd20: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
bd30: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
bd40: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
bd50: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
bd60: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
bd70: 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a  : ToInt P1 * * *
bd80: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bd90: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bda0: 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e  ster P1 be an in
bdb0: 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68  teger.  If.** Th
bdc0: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
bdd0: 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62  ntly a real numb
bde0: 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61  er, drop its fra
bdf0: 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a  ctional part..**
be00: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
be10: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
be20: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
be30: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
be40: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
be50: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
be60: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
be70: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
be80: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
be90: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
bea0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
beb0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
bec0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
bed0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
bee0: 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  ToInt: {        
bef0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bf00: 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20  e as TK_TO_INT, 
bf10: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in1 */.  if( (pI
bf20: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bf30: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
bf40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
bf50: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
bf60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
bf70: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bf80: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
bf90: 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20  de: ToReal P1 * 
bfa0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
bfb0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bfc0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bfd0: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
bfe0: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20  t number..** If 
bff0: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
c000: 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65  rently an intege
c010: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a  r, convert it..*
c020: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c030: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c040: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c050: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c060: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c070: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c080: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20  ) and store 0.0 
c090: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
c0a0: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
c0b0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c0c0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c0d0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c0e0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c0f0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c100: 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20  OP_ToReal: {    
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c120: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52   same as TK_TO_R
c130: 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  EAL, in1 */.  if
c140: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c150: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
c160: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c170: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
c180: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c190: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c1a0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
c1b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
c1c0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
c1d0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
c1e0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
c1f0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
c200: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
c210: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
c220: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
c230: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
c240: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
c250: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
c260: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
c270: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
c280: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
c290: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
c2a0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
c2b0: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
c2c0: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
c2d0: 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72 20   thru if either 
c2e0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
c2f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
c300: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
c310: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
c320: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
c330: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
c340: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
c350: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
c360: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
c370: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
c380: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
c390: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
c3a0: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
c3b0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
c3c0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
c3d0: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
c3e0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
c3f0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
c400: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
c410: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
c420: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
c430: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
c440: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
c450: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
c460: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
c470: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
c480: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
c490: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
c4a0: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
c4b0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
c4c0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
c4d0: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
c4e0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
c4f0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
c500: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
c510: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
c520: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
c530: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
c540: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
c550: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
c560: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
c570: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
c580: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
c590: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
c5a0: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
c5b0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
c5c0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
c5d0: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
c5e0: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
c5f0: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
c600: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
c610: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
c620: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
c630: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
c640: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
c650: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
c660: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
c670: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
c680: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
c690: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
c6a0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
c6b0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
c6c0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
c6d0: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
c6e0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
c6f0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
c700: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
c710: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
c720: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
c730: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
c740: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
c750: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
c760: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
c770: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
c780: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
c790: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a  gister P2..*/./*
c7a0: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
c7b0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
c7c0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
c7d0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
c7e0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
c7f0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
c800: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
c810: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
c820: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
c830: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
c840: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
c850: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
c860: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
c870: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
c880: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
c890: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
c8a0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
c8b0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
c8c0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
c8d0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
c8e0: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
c8f0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
c900: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
c910: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
c920: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
c930: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
c940: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
c950: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
c960: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
c970: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
c980: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
c990: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
c9a0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
c9b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
c9c0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
c9d0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
c9e0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
c9f0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
ca00: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ca10: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ca20: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
ca30: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
ca40: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
ca50: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ca60: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ca70: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ca80: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ca90: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
caa0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
cab0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
cac0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
cad0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
cae0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
caf0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
cb00: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
cb10: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
cb20: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
cb30: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
cb40: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
cb50: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
cb60: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
cb70: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
cb80: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
cb90: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
cba0: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
cbb0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
cbc0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
cbd0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
cbe0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
cbf0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
cc00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
cc30: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
cc40: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cc60: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
cc70: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
cc80: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
cc90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cca0: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
ccb0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ccc0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
ccd0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cce0: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
ccf0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
cd00: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
cd10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cd20: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
cd30: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
cd40: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
cd50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cd60: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
cd70: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   in3 */.  int fl
cd80: 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ags;.  int res;.
cd90: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
cda0: 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ..  flags = pIn1
cdb0: 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66 6c  ->flags|pIn3->fl
cdc0: 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61 67  ags;..  if( flag
cdd0: 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  s&MEM_Null ){.  
cde0: 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20 6f    /* If either o
cdf0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
ce00: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ce10: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
ce20: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
ce30: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
ce40: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ce50: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
ce60: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
ce70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
ce80: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70 4f  REP2 ){.      pO
ce90: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
cea0: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d 65  p->p2];.      Me
ceb0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
cec0: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
ced0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
cee0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
cef0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
cf00: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
cf10: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
cf20: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
cf30: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
cf40: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66  break;.  }..  af
cf50: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
cf60: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
cf70: 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e 69  SK;.  if( affini
cf80: 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  ty ){.    applyA
cf90: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
cfa0: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
cfb0: 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
cfc0: 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e  nity(pIn3, affin
cfd0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
cfe0: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
cff0: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
d000: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
d010: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
d020: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
d030: 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
d040: 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  =0 );.  ExpandBl
d050: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70 61  ob(pIn1);.  Expa
d060: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
d070: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
d080: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
d090: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
d0a0: 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70 4f  l);.  switch( pO
d0b0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
d0c0: 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
d0d0: 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
d0e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d0f0: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
d100: 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
d110: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d120: 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
d130: 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
d140: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
d150: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
d160: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
d170: 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
d180: 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
d190: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
d1a0: 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
d1b0: 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
d1c0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
d1d0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
d1e0: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
d1f0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
d200: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65  pOp->p2];.    Me
d210: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
d220: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
d230: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
d240: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
d250: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
d260: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ut);.  }else if(
d270: 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
d280: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
d290: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d2a0: 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
d2b0: 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
d2c0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
d2d0: 75 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  uation used by t
d2e0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
d2f0: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
d300: 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
d310: 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
d320: 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
d330: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
d340: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
d350: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20  OP_Permutation, 
d360: 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f  OP_Compare,.** O
d370: 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65  P_Halt, or OP_Re
d380: 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61  sultRow.  Typica
d390: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
d3a0: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63  tation should oc
d3b0: 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  cur.** immediate
d3c0: 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
d3d0: 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63  OP_Compare..*/.c
d3e0: 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
d3f0: 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
d400: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d410: 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
d420: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
d430: 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
d440: 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62   pOp->p4.ai;.  b
d450: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d460: 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
d470: 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
d480: 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74 6f  Compare to vecto
d490: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
d4a0: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
d4b0: 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74 68  P1+P3-1) (all th
d4c0: 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61  is.** one "A") a
d4d0: 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
d4e0: 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
d4f0: 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
d500: 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
d510: 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
d520: 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
d530: 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
d540: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
d550: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
d560: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
d570: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
d580: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
d590: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
d5a0: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
d5b0: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
d5c0: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
d5d0: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
d5e0: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
d5f0: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
d600: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
d610: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
d620: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
d630: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
d640: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
d650: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
d660: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
d670: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
d680: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
d690: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
d6a0: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
d6b0: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
d6c0: 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33   int n = pOp->p3
d6d0: 3b 0a 20 20 69 6e 74 20 69 2c 20 70 31 2c 20 70  ;.  int i, p1, p
d6e0: 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
d6f0: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d 20 70  fo *pKeyInfo = p
d700: 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
d710: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
d720: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
d730: 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
d740: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
d750: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
d760: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
d770: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
d780: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
d790: 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p2+n<=p->nMem+
d7a0: 31 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  1 );.  for(i=0; 
d7b0: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
d7c0: 6e 74 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74  nt idx = aPermut
d7d0: 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
d7e0: 3a 20 69 3b 0a 20 20 20 20 43 6f 6c 6c 53 65 71  : i;.    CollSeq
d7f0: 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
d800: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d810: 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
d820: 20 74 65 72 6d 20 2a 2f 0a 20 20 20 20 69 6e 74   term */.    int
d830: 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
d840: 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
d850: 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
d860: 72 20 2a 2f 0a 20 20 20 20 52 45 47 49 53 54 45  r */.    REGISTE
d870: 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
d880: 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  &p->aMem[p1+idx]
d890: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
d8a0: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70  TRACE(p2+idx, &p
d8b0: 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b  ->aMem[p2+idx]);
d8c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
d8d0: 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
d8e0: 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
d8f0: 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
d900: 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
d910: 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
d920: 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
d930: 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
d940: 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d  Compare(&p->aMem
d950: 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d  [p1+idx], &p->aM
d960: 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
d970: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
d980: 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
d990: 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
d9a0: 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
d9b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d9c0: 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
d9d0: 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
d9e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
d9f0: 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
da00: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
da10: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
da20: 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
da30: 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
da40: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
da50: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
da60: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
da70: 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
da80: 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
da90: 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
daa0: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
dab0: 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
dac0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
dad0: 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
daf0: 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
db00: 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
db10: 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
db20: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
db30: 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
db40: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
db50: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
db60: 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
db70: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
db80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
db90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
dba0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
dbb0: 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
dbc0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
dbd0: 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
dbe0: 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
dbf0: 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
dc00: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
dc10: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
dc20: 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
dc30: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
dc40: 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
dc50: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
dc60: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
dc70: 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
dc80: 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
dc90: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
dca0: 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
dcb0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
dcc0: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
dcd0: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
dce0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
dcf0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
dd00: 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
dd10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
dd20: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
dd30: 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
dd40: 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
dd50: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
dd60: 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
dd70: 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
dd80: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
dd90: 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
dda0: 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
ddb0: 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
ddc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dde0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
ddf0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
de00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de20: 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
de30: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
de40: 0a 20 20 69 6e 74 20 76 31 2c 20 76 32 3b 20 20  .  int v1, v2;  
de50: 20 20 2f 2a 20 30 3d 3d 46 41 4c 53 45 2c 20 31    /* 0==FALSE, 1
de60: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
de70: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
de80: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
de90: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
dea0: 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c     v1 = 2;.  }el
deb0: 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c  se{.    v1 = sql
dec0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ded0: 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn1)!=0;.  }. 
dee0: 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
def0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
df00: 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
df10: 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
df20: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
df30: 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
df40: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
df50: 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
df60: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
df70: 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
df80: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
df90: 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
dfa0: 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
dfb0: 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
dfc0: 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
dfd0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
dfe0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
dff0: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
e000: 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
e010: 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
e020: 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
e030: 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76  v2];.  }.  if( v
e040: 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
e050: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e060: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
e070: 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
e080: 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
e090: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
e0a0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
e0b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e0c0: 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
e0d0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74   * * *.**.** Int
e0e0: 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
e0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e100: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
e110: 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  ue.  Store the.*
e120: 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65  * boolean comple
e130: 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72  ment in register
e140: 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P2.  If the val
e150: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e160: 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
e170: 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74  hen a NULL is st
e180: 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  ored in P2..*/.c
e190: 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20  ase OP_Not: {   
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e1b0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20  same as TK_NOT, 
e1c0: 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  in1 */.  pOut = 
e1d0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
e1e0: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
e1f0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
e200: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
e210: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
e220: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
e230: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
e240: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73  etInt64(pOut, !s
e250: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e260: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
e270: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e280: 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
e290: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
e2a0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
e2b0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
e2c0: 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
e2d0: 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
e2e0: 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
e2f0: 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
e300: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
e310: 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
e320: 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
e330: 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
e340: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
e350: 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
e360: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e370: 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 20 2a 2f  K_BITNOT, in1 */
e380: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
e390: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
e3a0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e3b0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e3c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
e3d0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
e3e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
e3f0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
e400: 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33  4(pOut, ~sqlite3
e410: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
e420: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
e430: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e440: 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
e450: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
e460: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
e470: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e480: 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
e490: 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64   is.** is consid
e4a0: 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
e4b0: 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
e4c0: 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
e4d0: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
e4e0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
e4f0: 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33  e the jump if P3
e500: 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20   is true..*/./* 
e510: 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31  Opcode: IfNot P1
e520: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e530: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
e540: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e550: 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65  ster P1 is False
e560: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a  .  The value is.
e570: 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
e580: 20 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20   true if it has 
e590: 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
e5a0: 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  of zero.  If the
e5b0: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
e5c0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
e5d0: 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33  e the jump if P3
e5e0: 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73   is true..*/.cas
e5f0: 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20  e OP_If:        
e600: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
e610: 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50  , in1 */.case OP
e620: 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  _IfNot: {       
e630: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e640: 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20  1 */.  int c;.  
e650: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
e660: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
e670: 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
e680: 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
e690: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
e6a0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
e6b0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
e6c0: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
e6d0: 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
e6e0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
e6f0: 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
e700: 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
e710: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
e720: 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
e730: 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  }.  if( c ){.   
e740: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
e750: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e760: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
e770: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
e780: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
e790: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
e7a0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e7b0: 4e 55 4c 4c 2e 20 20 49 66 20 50 33 20 69 73 20  NULL.  If P3 is 
e7c0: 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
e7d0: 7a 65 72 6f 2c 20 74 68 65 6e 20 63 68 65 63 6b  zero, then check
e7e0: 20 61 6c 6c 20 76 61 6c 75 65 73 20 72 65 67 28   all values reg(
e7f0: 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
e800: 0a 2a 2a 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  .** reg(P1+2), .
e810: 2e 2e 2c 20 72 65 67 28 50 31 2b 50 33 2d 31 29  .., reg(P1+P3-1)
e820: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
e830: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
e840: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e850: 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
e860: 31 20 2a 2f 0a 20 20 69 6e 74 20 6e 20 3d 20 70  1 */.  int n = p
e870: 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
e880: 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
e890: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 64  pOp->p1>0 );.  d
e8a0: 6f 7b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  o{.    if( (pIn1
e8b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
e8c0: 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ll)!=0 ){.      
e8d0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
e8e0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
e8f0: 20 20 20 7d 0a 20 20 20 20 70 49 6e 31 2b 2b 3b     }.    pIn1++;
e900: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 3e  .  }while( --n >
e910: 20 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   0 );.  break;.}
e920: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
e930: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
e940: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
e950: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
e960: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
e970: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
e980: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
e990: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e9a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
e9b0: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
e9c0: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
e9d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
e9e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
e9f0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
ea00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ea10: 4f 70 63 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f  Opcode: SetNumCo
ea20: 6c 75 6d 6e 73 20 2a 20 50 32 20 2a 20 2a 20 2a  lumns * P2 * * *
ea30: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
ea40: 64 65 20 73 65 74 73 20 74 68 65 20 6e 75 6d 62  de sets the numb
ea50: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
ea60: 72 20 74 68 65 20 63 75 72 73 6f 72 20 6f 70 65  r the cursor ope
ea70: 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 66 6f  ned by the.** fo
ea80: 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
ea90: 69 6f 6e 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ion to P2..**.**
eaa0: 20 41 6e 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c   An OP_SetNumCol
eab0: 75 6d 6e 73 20 69 73 20 6f 6e 6c 79 20 75 73 65  umns is only use
eac0: 66 75 6c 20 69 66 20 69 74 20 6f 63 63 75 72 73  ful if it occurs
ead0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66   immediately bef
eae0: 6f 72 65 20 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74  ore .** one of t
eaf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63  he following opc
eb00: 6f 64 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  odes:.**.**     
eb10: 4f 70 65 6e 52 65 61 64 0a 2a 2a 20 20 20 20 20  OpenRead.**     
eb20: 4f 70 65 6e 57 72 69 74 65 0a 2a 2a 20 20 20 20  OpenWrite.**    
eb30: 20 4f 70 65 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a   OpenPseudo.**.*
eb40: 2a 20 49 66 20 74 68 65 20 4f 50 5f 43 6f 6c 75  * If the OP_Colu
eb50: 6d 6e 20 6f 70 63 6f 64 65 20 69 73 20 74 6f 20  mn opcode is to 
eb60: 62 65 20 65 78 65 63 75 74 65 64 20 6f 6e 20 61  be executed on a
eb70: 20 63 75 72 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a   cursor, then.**
eb80: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73   this opcode mus
eb90: 74 20 62 65 20 70 72 65 73 65 6e 74 20 69 6d 6d  t be present imm
eba0: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
ebb0: 74 68 65 20 6f 70 63 6f 64 65 20 74 68 61 74 0a  the opcode that.
ebc0: 2a 2a 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  ** opens the cur
ebd0: 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sor..*/.case OP_
ebe0: 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b  SetNumColumns: {
ebf0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ec00: 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
ec10: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
ec20: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
ec30: 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
ec40: 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
ec50: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
ec60: 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
ec70: 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
ec80: 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
ec90: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
eca0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ecb0: 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
ecc0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
ecd0: 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
ece0: 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
ecf0: 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
ed00: 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
ed10: 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
ed20: 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
ed30: 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
ed40: 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
ed50: 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
ed60: 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
ed70: 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
ed80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
ed90: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
eda0: 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
edb0: 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
edc0: 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
edd0: 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
ede0: 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
edf0: 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
ee00: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
ee10: 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
ee20: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
ee30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
ee40: 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 61 79 6c 6f  n: {.  int paylo
ee50: 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d  adSize;   /* Num
ee60: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
ee70: 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
ee80: 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
ee90: 3b 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f  ;  /* P1 value o
eea0: 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a  f the opcode */.
eeb0: 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e    int p2 = pOp->
eec0: 70 32 3b 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e  p2;  /* column n
eed0: 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
eee0: 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
eef0: 72 20 2a 70 43 20 3d 20 30 3b 2f 2a 20 54 68 65  r *pC = 0;/* The
ef00: 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
ef10: 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20    char *zRec;   
ef20: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
ef30: 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  to complete reco
ef40: 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43  rd-data */.  BtC
ef50: 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
ef60: 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
ef70: 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
ef80: 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
ef90: 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
efa0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
efb0: 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
efc0: 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
efd0: 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
efe0: 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
eff0: 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
f000: 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
f010: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  mn */.  int nFie
f020: 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75  ld;        /* nu
f030: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
f040: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
f050: 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
f060: 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
f070: 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
f080: 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
f090: 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
f0a0: 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
f0b0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
f0c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74   */.  char *zDat
f0d0: 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74  a;       /* Part
f0e0: 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
f0f0: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f100: 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
f110: 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
f120: 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
f130: 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
f140: 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
f150: 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
f160: 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
f170: 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 0a 20  ng decoded */.. 
f180: 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
f190: 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
f1a0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d  .  assert( p1<p-
f1b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
f1c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
f1d0: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
f1e0: 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
f1f0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
f200: 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  3];.  MemSetType
f210: 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
f220: 4e 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69  Null);..  /* Thi
f230: 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65  s block sets the
f240: 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61   variable payloa
f250: 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20  dSize to be the 
f260: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a  total number of.
f270: 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68    ** bytes in th
f280: 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20  e record..  **. 
f290: 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20   ** zRec is set 
f2a0: 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65  to be the comple
f2b0: 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72  te text of the r
f2c0: 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61  ecord if it is a
f2d0: 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54  vailable..  ** T
f2e0: 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  he complete reco
f2f0: 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79  rd text is alway
f300: 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  s available for 
f310: 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20  pseudo-tables.  
f320: 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
f330: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
f340: 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70  cursor, the comp
f350: 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74  lete record text
f360: 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61  .  ** might be a
f370: 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
f380: 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
f390: 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f    Or it might no
f3a0: 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68  t be..  ** If th
f3b0: 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69  e data is unavai
f3c0: 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20  lable,  zRec is 
f3d0: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a  set to NULL..  *
f3e0: 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63  *.  ** We also c
f3f0: 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
f400: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f410: 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72  the record.  For
f420: 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74   cursors,.  ** t
f430: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
f440: 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69  umns is stored i
f450: 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  n the VdbeCursor
f460: 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e  .nField element.
f470: 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e  .  */.  pC = p->
f480: 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73  apCsr[p1];.  ass
f490: 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
f4a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f4b0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
f4c0: 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74   assert( pC->pVt
f4d0: 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23  abCursor==0 );.#
f4e0: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e  endif.  if( pC->
f4f0: 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20  pCursor!=0 ){.  
f500: 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
f510: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42  is stored in a B
f520: 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20  -Tree */.    rc 
f530: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
f540: 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
f550: 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
f560: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
f570: 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20  ror;.    zRec = 
f580: 30 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  0;.    pCrsr = p
f590: 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  C->pCursor;.    
f5a0: 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
f5b0: 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
f5c0: 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
f5d0: 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
f5e0: 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
f5f0: 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
f600: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
f610: 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
f620: 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
f630: 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
f640: 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
f650: 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 69 36  ndex ){.      i6
f660: 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
f670: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
f680: 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
f690: 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
f6a0: 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  );.      payload
f6b0: 53 69 7a 65 20 3d 20 28 69 6e 74 29 70 61 79 6c  Size = (int)payl
f6c0: 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d  oadSize64;.    }
f6d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
f6e0: 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
f6f0: 28 70 43 72 73 72 2c 20 28 75 33 32 20 2a 29 26  (pCrsr, (u32 *)&
f700: 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
f710: 20 20 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d    }.    nField =
f720: 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d   pC->nField;.  }
f730: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
f740: 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
f750: 65 20 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e );.    /* The 
f760: 72 65 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f  record is the so
f770: 6c 65 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73  le entry of a ps
f780: 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
f790: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f7a0: 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a  pC->nData;.    z
f7b0: 52 65 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b  Rec = pC->pData;
f7c0: 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
f7d0: 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
f7e0: 4c 45 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  LE;.    assert( 
f7f0: 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
f800: 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20  | zRec!=0 );.   
f810: 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46   nField = pC->nF
f820: 69 65 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20  ield;.    pCrsr 
f830: 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  = 0;.  }..  /* I
f840: 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73  f payloadSize is
f850: 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74   0, then just st
f860: 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20  ore a NULL */.  
f870: 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  if( payloadSize=
f880: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
f890: 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
f8a0: 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67  EM_Null );.    g
f8b0: 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
f8c0: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 61 79  t;.  }.  if( pay
f8d0: 6c 6f 61 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69  loadSize>db->aLi
f8e0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
f8f0: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
f900: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
f910: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  }..  assert( p2<
f920: 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20  nField );..  /* 
f930: 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74  Read and parse t
f940: 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e  he table header.
f950: 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
f960: 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65  lts of the parse
f970: 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72  .  ** into the r
f980: 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63  ecord header cac
f990: 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
f9a0: 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
f9b0: 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
f9c0: 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  e;.  if( pC->cac
f9d0: 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
f9e0: 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66  heCtr ){.    aOf
f9f0: 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
fa00: 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  et;.  }else{.   
fa10: 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
fa20: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
fa30: 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 38  header */.    u8
fa40: 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 2f   *zEndHdr;     /
fa50: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
fa60: 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68  st byte after th
fa70: 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
fa80: 69 6e 74 20 6f 66 66 73 65 74 3b 20 20 20 20 20  int offset;     
fa90: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
faa0: 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  the data */.    
fab0: 69 6e 74 20 73 7a 48 64 72 53 7a 3b 20 20 20 20  int szHdrSz;    
fac0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
fad0: 68 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c  header size fiel
fae0: 64 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65  d at start of re
faf0: 63 6f 72 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  cord */.    int 
fb00: 61 76 61 69 6c 20 3d 20 30 3b 20 20 20 2f 2a 20  avail = 0;   /* 
fb10: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
fb20: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
fb30: 61 20 2a 2f 0a 0a 20 20 20 20 61 73 73 65 72 74  a */..    assert
fb40: 28 61 54 79 70 65 29 3b 0a 20 20 20 20 70 43 2d  (aType);.    pC-
fb50: 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
fb60: 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
fb70: 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
fb80: 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
fb90: 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
fba0: 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
fbb0: 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
fbc0: 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
fbd0: 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
fbe0: 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
fbf0: 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
fc00: 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
fc10: 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
fc20: 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
fc30: 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
fc40: 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
fc50: 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
fc60: 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
fc70: 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
fc80: 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
fc90: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
fca0: 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
fcb0: 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
fcc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
fcd0: 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
fce0: 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
fcf0: 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
fd00: 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
fd10: 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
fd20: 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
fd30: 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
fd40: 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
fd50: 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
fd60: 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
fd70: 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
fd80: 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
fd90: 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
fda0: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
fdb0: 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
fdc0: 20 20 20 20 69 66 28 20 61 76 61 69 6c 3e 3d 70      if( avail>=p
fdd0: 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
fde0: 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61        zRec = zDa
fdf0: 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  ta;.        pC->
fe00: 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74  aRow = (u8*)zDat
fe10: 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  a;.      }else{.
fe20: 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
fe30: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
fe40: 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66    }.    /* The f
fe50: 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20  ollowing assert 
fe60: 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63  is true in all c
fe70: 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e  ases accept when
fe80: 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61  .    ** the data
fe90: 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65  base file has be
fea0: 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74  en corrupted ext
feb0: 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20  ernally..    ** 
fec0: 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21     assert( zRec!
fed0: 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79  =0 || avail>=pay
fee0: 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69  loadSize || avai
fef0: 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73  l>=9 ); */.    s
ff00: 7a 48 64 72 53 7a 20 3d 20 67 65 74 56 61 72 69  zHdrSz = getVari
ff10: 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c  nt32((u8*)zData,
ff20: 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f   offset);..    /
ff30: 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
ff40: 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
ff50: 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
ff60: 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
ff70: 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
ff80: 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
ff90: 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
ffa0: 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
ffb0: 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
ffc0: 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
ffd0: 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
ffe0: 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
fff0: 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
10000 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
10010 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
10020 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
10030 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
10040 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
10050 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
10060 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
10070 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
10080 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
10090 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6f 66 66  Rec && avail<off
100a0 73 65 74 20 29 7b 0a 20 20 20 20 20 20 73 4d 65  set ){.      sMe
100b0 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  m.flags = 0;.   
100c0 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a     sMem.db = 0;.
100d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
100e0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
100f0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6f 66 66  ee(pCrsr, 0, off
10100 73 65 74 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  set, pC->isIndex
10110 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
10120 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
10130 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
10140 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
10150 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
10160 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
10170 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72     }.    zEndHdr
10180 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
10190 6f 66 66 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64  offset];.    zId
101a0 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61  x = (u8 *)&zData
101b0 5b 73 7a 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20  [szHdrSz];..    
101c0 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64  /* Scan the head
101d0 65 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f  er and use it to
101e0 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79   fill in the aTy
101f0 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  pe[] and aOffset
10200 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73  [].    ** arrays
10210 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c  .  aType[i] will
10220 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70   contain the typ
10230 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68  e integer for th
10240 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f  e i-th.    ** co
10250 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74  lumn and aOffset
10260 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
10270 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
10280 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
10290 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
102a0 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74  ord to the start
102b0 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72   of the data for
102c0 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   the i-th column
102d0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  .    */.    for(
102e0 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69  i=0; i<nField; i
102f0 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  ++){.      if( z
10300 49 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20  Idx<zEndHdr ){. 
10310 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
10320 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20  ] = offset;.    
10330 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56      zIdx += getV
10340 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54  arint32(zIdx, aT
10350 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ype[i]);.       
10360 20 6f 66 66 73 65 74 20 2b 3d 20 73 71 6c 69 74   offset += sqlit
10370 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
10380 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20  Len(aType[i]);. 
10390 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
103a0 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c      /* If i is l
103b0 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c  ess that nField,
103c0 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
103d0 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74  less fields in t
103e0 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  his.        ** r
103f0 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75  ecord than SetNu
10400 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74  mColumns indicat
10410 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c  ed there are col
10420 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20  umns in the.    
10430 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65      ** table. Se
10440 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72  t the offset for
10450 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d   any extra colum
10460 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69  ns not present i
10470 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  n.        ** the
10480 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68   record to 0. Th
10490 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65  is tells code be
104a0 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e  low to store a N
104b0 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  ULL.        ** i
104c0 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69  nstead of deseri
104d0 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20  alizing a value 
104e0 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
104f0 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
10500 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
10510 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
10520 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
10530 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
10540 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61  m);.    sMem.fla
10550 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a  gs = MEM_Null;..
10560 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
10570 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
10580 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
10590 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
105a0 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a  e header,.    **
105b0 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
105c0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
105d0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70   appears to be p
105e0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
105f0 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  he.    ** record
10600 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  , or if the end 
10610 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
10620 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
10630 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20  before the end. 
10640 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
10650 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69  ord (when all fi
10660 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74  elds present), t
10670 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64  hen we must be d
10680 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77  ealing .    ** w
10690 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
106a0 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20  tabase..    */. 
106b0 20 20 20 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64     if( zIdx>zEnd
106c0 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61  Hdr || offset>pa
106d0 79 6c 6f 61 64 53 69 7a 65 20 0a 20 20 20 20 20  yloadSize .     
106e0 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64  || (zIdx==zEndHd
106f0 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79  r && offset!=pay
10700 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20  loadSize) ){.   
10710 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
10720 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
10730 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
10740 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  n_out;.    }.  }
10750 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63  ..  /* Get the c
10760 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  olumn informatio
10770 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32  n. If aOffset[p2
10780 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  ] is non-zero, t
10790 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69  hen .  ** deseri
107a0 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20  alize the value 
107b0 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
107c0 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
107d0 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68  is zero,.  ** th
107e0 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74  en there are not
107f0 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69   enough fields i
10800 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  n the record to 
10810 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a  satisfy the.  **
10820 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68   request.  In th
10830 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65  is case, set the
10840 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74   value NULL or t
10850 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20  o P4 if P4 is.  
10860 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
10870 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20  a Mem object..  
10880 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74  */.  if( aOffset
10890 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65  [p2] ){.    asse
108a0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
108b0 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  K );.    if( zRe
108c0 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  c ){.      sqlit
108d0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
108e0 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b  External(pDest);
108f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10900 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20  beSerialGet((u8 
10910 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b  *)&zRec[aOffset[
10920 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c  p2]], aType[p2],
10930 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
10940 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se{.      len = 
10950 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
10960 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70  lTypeLen(aType[p
10970 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  2]);.      sqlit
10980 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
10990 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  Mem, pDest);.   
109a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
109b0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
109c0 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70  pCrsr, aOffset[p
109d0 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49  2], len, pC->isI
109e0 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
109f0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
10a00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
10a10 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10a20 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
10a30 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
10a40 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
10a50 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
10a60 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b  8*)zData, aType[
10a70 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
10a80 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e   }.    pDest->en
10a90 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
10aa0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
10ab0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d  Op->p4type==P4_M
10ac0 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  EM ){.      sqli
10ad0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
10ae0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
10af0 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
10b00 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73  tatic);.    }els
10b10 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
10b20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45   pDest->flags&ME
10b30 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a  M_Null );.    }.
10b40 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20    }..  /* If we 
10b50 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
10b60 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68  cated space to h
10b70 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e  old the data (in
10b80 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
10b90 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
10ba0 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20  e() call above) 
10bb0 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f  then transfer co
10bc0 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20  ntrol of that.  
10bd0 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ** dynamically a
10be0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f  llocated space o
10bf0 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74  ver to the pDest
10c00 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a   structure..  **
10c10 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61   This prevents a
10c20 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20   memory copy..  
10c30 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d  */.  if( sMem.zM
10c40 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73  alloc ){.    ass
10c50 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65  ert( sMem.z==sMe
10c60 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20  m.zMalloc );.   
10c70 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
10c80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
10c90 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  n) );.    assert
10ca0 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
10cb0 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
10cc0 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d  _Str)) || pDest-
10cd0 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20  >z==sMem.z );.  
10ce0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
10cf0 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45  = ~(MEM_Ephem|ME
10d00 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70  M_Static);.    p
10d10 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  Dest->flags |= M
10d20 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65  EM_Term;.    pDe
10d30 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  st->z = sMem.z;.
10d40 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c      pDest->zMall
10d50 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  oc = sMem.zMallo
10d60 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  c;.  }..  rc = s
10d70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
10d80 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74  eWriteable(pDest
10d90 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  );..op_column_ou
10da0 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
10db0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
10dc0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
10dd0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
10de0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
10df0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
10e00 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
10e10 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
10e20 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
10e30 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
10e40 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
10e50 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
10e60 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
10e70 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
10e80 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61  ong. The nth cha
10e90 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
10ea0 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
10eb0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
10ec0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
10ed0 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
10ee0 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20  e nth.** memory 
10ef0 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
10f00 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
10f10 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72  finity: {.  char
10f20 20 2a 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f   *zAffinity = pO
10f30 70 2d 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a  p->p4.z;.  Mem *
10f40 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65  pData0 = &p->aMe
10f50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65  m[pOp->p1];.  Me
10f60 6d 20 2a 70 4c 61 73 74 20 3d 20 26 70 44 61 74  m *pLast = &pDat
10f70 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20  a0[pOp->p2-1];. 
10f80 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66   Mem *pRec;..  f
10f90 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
10fa0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
10fb0 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64  c++){.    Expand
10fc0 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
10fd0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
10fe0 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52  ec, zAffinity[pR
10ff0 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f  ec-pData0], enco
11000 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ding);.  }.  bre
11010 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11020 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
11030 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
11040 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
11050 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
11060 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73  with P1 into a s
11070 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73  ingle entry.** s
11080 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20  uitable for use 
11090 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
110a0 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
110b0 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
110c0 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
110d0 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66    The details of
110e0 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20   the format are 
110f0 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f  irrelevant as lo
11100 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f  ng as.** the OP_
11110 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61  Column opcode ca
11120 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63  n decode the rec
11130 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65  ord later..** Re
11140 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f  fer to source co
11150 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  de comments for 
11160 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  the details of t
11170 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72  he record.** for
11180 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  mat..**.** P4 ma
11190 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
111a0 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
111b0 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
111c0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
111d0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
111e0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
111f0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
11200 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
11210 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
11220 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
11230 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
11240 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
11250 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
11260 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
11270 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
11280 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
11290 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
112a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
112b0 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
112c0 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
112d0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f   the affinity NO
112e0 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  NE..*/.case OP_M
112f0 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f  akeRecord: {.  /
11300 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
11310 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
11320 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
11330 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
11340 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
11350 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
11360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
113a0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
113b0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
113c0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
113d0 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
113e0 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
113f0 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
11400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11440 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
11450 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
11460 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
11470 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
11480 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
11490 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
114a0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
114b0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
114c0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
114d0 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
114e0 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
114f0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
11500 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
11510 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
11520 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
11530 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
11540 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
11550 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
11560 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
11570 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
11580 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
11590 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
115a0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
115b0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
115c0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
115d0 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
115e0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
115f0 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
11600 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
11610 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
11620 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20  Data = 0;       
11630 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
11640 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
11650 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
11660 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
11670 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11680 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
11690 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
116a0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
116b0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
116c0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
116d0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
116e0 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
116f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
11700 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
11710 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
11720 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
11730 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
11740 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11750 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
11760 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
11770 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
11780 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
11790 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
117a0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
117b0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
117c0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
117d0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
117e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
117f0 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
11800 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11810 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
11820 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11830 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
11840 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
11850 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
11860 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
11870 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
11880 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11890 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
118a0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
118b0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
118c0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
118d0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
118e0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
118f0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
11900 5d 20 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  ] */..  nField =
11910 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
11920 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
11930 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
11940 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
11950 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
11960 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
11970 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70  );.  pData0 = &p
11980 2d 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a  ->aMem[nField];.
11990 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
119a0 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
119b0 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
119c0 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
119d0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
119e0 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f  Format;..  /* Lo
119f0 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
11a00 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
11a10 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
11a20 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
11a30 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
11a40 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
11a50 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
11a60 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f  ecord..  */.  fo
11a70 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
11a80 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
11a90 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6c 65 6e  ++){.    int len
11aa0 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  ;.    if( zAffin
11ab0 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
11ac0 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
11ad0 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
11ae0 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
11af0 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  g);.    }.    if
11b00 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  ( pRec->flags&ME
11b10 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e  M_Zero && pRec->
11b20 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  n>0 ){.      sql
11b30 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
11b40 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
11b50 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79   }.    serial_ty
11b60 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
11b70 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
11b80 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
11b90 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
11ba0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
11bb0 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
11bc0 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
11bd0 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71  ;.    nHdr += sq
11be0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
11bf0 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
11c00 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
11c10 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
11c20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72       /* Only pur
11c30 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c  e zero-filled BL
11c40 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74  OBs can be input
11c50 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e   to this Opcode.
11c60 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20  .      ** We do 
11c70 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20  not allow blobs 
11c80 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e  with a prefix an
11c90 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  d a zero-filled 
11ca0 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e  tail. */.      n
11cb0 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
11cc0 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
11cd0 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20   if( len ){.    
11ce0 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20    nZero = 0;.   
11cf0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64   }.  }..  /* Add
11d00 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61   the initial hea
11d10 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74  der varint and t
11d20 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f  otal the size */
11d30 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69  .  nHdr += nVari
11d40 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69  nt = sqlite3Vari
11d50 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69  ntLen(nHdr);.  i
11d60 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
11d70 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
11d80 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b  ) ){.    nHdr++;
11d90 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
11da0 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b  Hdr+nData-nZero;
11db0 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
11dc0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
11dd0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
11de0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
11df0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
11e00 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
11e10 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
11e20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
11e30 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
11e40 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
11e50 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
11e60 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
11e70 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
11e80 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
11e90 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
11ea0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
11eb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
11ec0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
11ed0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63  3VdbeMemGrow() c
11ee0 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
11ef0 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
11f00 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
11f10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11f20 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
11f30 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
11f40 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
11f50 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
11f60 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  p3];.  if( sqlit
11f70 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
11f80 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
11f90 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
11fa0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
11fb0 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
11fc0 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
11fd0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
11fe0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
11ff0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
12000 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
12010 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
12020 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
12030 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
12040 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12050 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
12060 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
12070 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
12080 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
12090 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
120a0 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
120b0 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
120c0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
120d0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
120e0 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
120f0 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
12100 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12110 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
12120 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
12130 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
12140 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
12150 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
12160 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
12170 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
12180 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
12190 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
121a0 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
121b0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c  ags = MEM_Blob |
121c0 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74   MEM_Dyn;.  pOut
121d0 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66  ->xDel = 0;.  if
121e0 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
121f0 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
12200 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
12210 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
12220 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
12230 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
12240 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
12250 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
12260 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
12270 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
12280 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
12290 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
122a0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
122b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
122c0 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65 6d 65   Opcode: Stateme
122d0 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nt P1 * * * *.**
122e0 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69 6e 64  .** Begin an ind
122f0 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d 65 6e  ividual statemen
12300 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  t transaction wh
12310 69 63 68 20 69 73 20 70 61 72 74 20 6f 66 20 61  ich is part of a
12320 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61 6e 73   larger.** trans
12330 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  action.  This is
12340 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61 74 20   needed so that 
12350 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
12360 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64 20 62   can be rolled b
12370 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
12380 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
12390 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
123a0 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
123b0 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nsaction.  The s
123c0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
123d0 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61  tion will automa
123e0 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69  tically.** commi
123f0 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
12400 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
12410 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
12420 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
12430 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f 6d 6d  ntly in autocomm
12440 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20 0a 2a  it mode (that .*
12450 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69 66 20  * is to say, if 
12460 69 74 20 69 73 20 69 6e 20 62 65 74 77 65 65 6e  it is in between
12470 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d 4d 49   BEGIN and COMMI
12480 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74 68 65  T).** and if the
12490 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20  re are no other 
124a0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
124b0 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 64 61  s on the same da
124c0 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
124d0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69 73 20  tion, then this 
124e0 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61 20 6e  operation is a n
124f0 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74 65 6d  o-op.  No statem
12500 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
12510 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73 69 6e  ** is needed sin
12520 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63 61 6e  ce any error can
12530 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20   use the normal 
12540 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
12550 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68 61 6e   to.** undo chan
12560 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ges..**.** If a 
12570 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
12580 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
12590 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65 6d 65  , then a stateme
125a0 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a  nt journal file.
125b0 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63  ** will be alloc
125c0 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69 61 6c  ated and initial
125d0 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ized..**.** The 
125e0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62 65 67  statement is beg
125f0 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  un on the databa
12600 73 65 20 66 69 6c 65 20 77 69 74 68 20 69 6e 64  se file with ind
12610 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61 69 6e  ex P1.  The main
12620 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
12630 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  e has an index o
12640 66 20 30 20 61 6e 64 20 74 68 65 20 66 69 6c 65  f 0 and the file
12650 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
12660 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61  ary tables.** ha
12670 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e  s an index of 1.
12680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 61 74  .*/.case OP_Stat
12690 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66 28 20 64  ement: {.  if( d
126a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
126b0 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64   || db->activeVd
126c0 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 69  beCnt>1 ){.    i
126d0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
126e0 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
126f0 20 20 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30      assert( i>=0
12700 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29 3b   && i<db->nDb );
12710 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
12720 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d 30 20 29  >aDb[i].pBt!=0 )
12730 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e  ;.    pBt = db->
12740 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
12750 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
12760 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
12770 74 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  t) );.    assert
12780 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
12790 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a  & (1<<i))!=0 );.
127a0 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65 33      if( !sqlite3
127b0 42 74 72 65 65 49 73 49 6e 53 74 6d 74 28 70 42  BtreeIsInStmt(pB
127c0 74 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  t) ){.      rc =
127d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
127e0 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a 20 20 20  inStmt(pBt);.   
127f0 20 20 20 70 2d 3e 6f 70 65 6e 65 64 53 74 61 74     p->openedStat
12800 65 6d 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ement = 1;.    }
12810 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
12830 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
12840 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
12850 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
12860 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
12870 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
12880 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
12890 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
128a0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
128b0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
128c0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
128d0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
128e0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
128f0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
12900 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
12910 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
12920 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
12930 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
12940 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d  .  int p1 = pOp-
12950 3e 70 31 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  >p1;.  char *zNa
12960 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 20  me = pOp->p4.z; 
12970 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
12980 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
12990 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
129a0 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
129b0 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
129c0 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
129d0 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
129e0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
129f0 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
12a00 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
12a10 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
12a20 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
12a30 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
12a40 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
12a50 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
12a60 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
12a70 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
12a80 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
12a90 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
12aa0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
12ab0 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
12ac0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
12ad0 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
12ae0 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
12af0 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20  tCount(db) );.. 
12b00 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
12b10 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
12b20 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62  if( db->writeVdb
12b30 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  eCnt>0 ){.      
12b40 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
12b50 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
12b60 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
12b70 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
12b80 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
12b90 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
12ba0 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
12bb0 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
12bc0 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
12bd0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
12be0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
12bf0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
12c00 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
12c10 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
12c20 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
12c30 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
12c40 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
12c50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12c60 20 69 6e 74 20 6e 4e 61 6d 65 20 3d 20 73 71 6c   int nName = sql
12c70 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
12c80 6d 65 29 3b 0a 20 20 20 20 20 20 53 61 76 65 70  me);.      Savep
12c90 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 0a 20 20 20  oint *pNew;..   
12ca0 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
12cb0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
12cc0 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
12cd0 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
12ce0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
12cf0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
12d00 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
12d10 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
12d20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
12d30 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
12d40 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
12d50 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
12d60 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
12d70 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
12d80 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
12d90 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
12da0 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
12db0 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
12dc0 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
12dd0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
12de0 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
12df0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
12e00 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
12e10 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
12e20 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
12e30 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
12e40 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
12e50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12e60 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
12e70 69 6e 74 2b 2b 3b 0a 09 7d 0a 20 20 20 20 0a 20  int++;..}.    . 
12e80 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74         /* Link t
12e90 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74  he new savepoint
12ea0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
12eb0 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74  se handle's list
12ec0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65  . */.        pNe
12ed0 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70  w->pNext = db->p
12ee0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
12ef0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
12f00 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20  t = pNew;.      
12f10 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
12f20 0a 20 20 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  .    Savepoint *
12f30 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
12f40 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 20 3d  int iSavepoint =
12f50 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
12f60 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
12f70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
12f80 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
12f90 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
12fa0 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
12fb0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
12fc0 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
12fd0 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
12fe0 69 6e 74 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  int=db->pSavepoi
12ff0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
13000 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
13010 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
13020 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
13030 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
13040 69 6e 74 3d 70 53 61 76 65 70 6f 69 6e 74 2d 3e  int=pSavepoint->
13050 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
13060 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
13070 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
13080 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
13090 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
130a0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
130b0 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73  , db, "no such s
130c0 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
130d0 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
130e0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
130f0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20      }else if( . 
13100 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65         db->write
13110 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31  VdbeCnt>0 || (p1
13120 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
13130 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69  BACK && db->acti
13140 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20  veVdbeCnt>1) .  
13150 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74    ){.      /* It
13160 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
13170 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
13180 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
13190 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
131a0 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
131b0 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
131c0 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
131d0 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  ble to rollback 
131e0 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20  a savepoint.    
131f0 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72    ** if there ar
13200 65 20 61 6e 79 20 61 63 74 69 76 65 20 73 74 61  e any active sta
13210 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a  tements at all..
13220 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
13230 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
13240 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
13250 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f   .        "canno
13260 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d  t %s savepoint -
13270 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
13280 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20  in progress",.  
13290 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50        (p1==SAVEP
132a0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20  OINT_ROLLBACK ? 
132b0 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c  "rollback": "rel
132c0 65 61 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a  ease").      );.
132d0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
132e0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
132f0 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
13300 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
13310 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
13320 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
13330 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
13340 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
13350 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
13360 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
13370 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
13380 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
13390 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
133a0 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
133b0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
133c0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
133d0 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
133e0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
133f0 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  t;.      if( isT
13400 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
13410 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
13420 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ASE ){.        d
13430 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
13440 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
13450 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
13460 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
13470 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
13480 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
13490 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
134a0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
134b0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
134c0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
134d0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
134e0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
134f0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
13500 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
13510 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
13520 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
13530 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13540 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20   int ii;.       
13550 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
13560 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
13570 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
13580 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
13590 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
135a0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
135b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
135c0 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
135d0 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
135e0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
135f0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13600 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13610 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
13620 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 09  _due_to_error;..
13630 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
13640 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
13650 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
13660 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53   && (db->flags&S
13670 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
13680 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ges)!=0 ){.     
13690 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
136a0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
136b0 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
136c0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
136d0 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
136e0 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  b, 0);.        }
136f0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
13700 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
13710 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
13720 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
13730 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
13740 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
13750 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
13760 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
13770 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
13780 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
13790 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
137a0 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
137b0 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
137c0 20 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54     Savepoint *pT
137d0 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
137e0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
137f0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
13800 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
13810 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
13820 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
13830 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
13840 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
13850 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
13860 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
13870 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
13880 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
13890 72 61 74 65 64 20 6f 6e 20 74 6f 6f 20 2a 2f 0a  rated on too */.
138a0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
138b0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
138c0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
138d0 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
138e0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
138f0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
13900 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
13910 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
13920 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
13930 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
13940 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
13950 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
13960 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
13970 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
13980 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
13990 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
139a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
139b0 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
139c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
139d0 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
139e0 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
139f0 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
13a00 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
13a10 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
13a20 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
13a30 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
13a40 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
13a50 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
13a60 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
13a70 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
13a80 20 74 68 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52   the COMMIT or R
13a90 4f 4c 4c 42 41 43 4b 20 73 74 61 74 65 6d 65 6e  OLLBACK statemen
13aa0 74 20 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54  t fails..**.** T
13ab0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
13ac0 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
13ad0 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
13ae0 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
13af0 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
13b00 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
13b10 31 3b 0a 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63  1;.  int rollbac
13b20 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  k = pOp->p2;.  i
13b30 6e 74 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  nt turnOnAC = de
13b40 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
13b50 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
13b60 69 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64  it;..  assert( d
13b70 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
13b80 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
13b90 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
13ba0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
13bb0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
13bc0 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a   rollback==0 );.
13bd0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
13be0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29  ctiveVdbeCnt>0 )
13bf0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
13c00 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
13c10 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74  tive */..  if( t
13c20 75 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62  urnOnAC && rollb
13c30 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76  ack && db->activ
13c40 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
13c50 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
13c60 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
13c70 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61  nts a ROLLBACK a
13c80 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
13c90 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75  .    ** still ru
13ca0 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61  nning, and a tra
13cb0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
13cc0 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ve, return an er
13cd0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20  ror indicating. 
13ce0 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f     ** that the o
13cf0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
13d00 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
13d10 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
13d20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
13d30 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
13d40 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61  not rollback tra
13d50 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
13d60 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
13d70 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
13d80 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
13d90 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
13da0 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26  e if( turnOnAC &
13db0 26 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & !rollback && d
13dc0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
13dd0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
13de0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
13df0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
13e00 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
13e10 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
13e20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
13e30 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
13e40 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
13e50 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
13e60 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
13e70 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
13e80 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
13e90 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
13ea0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
13eb0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
13ec0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
13ed0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
13ee0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
13ef0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
13f00 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
13f10 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
13f20 29 7b 0a 20 20 20 20 69 66 28 20 72 6f 6c 6c 62  ){.    if( rollb
13f30 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
13f40 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
13f50 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
13f60 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
13f70 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20  ckAll(db);.     
13f80 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
13f90 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
13fa0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
13fb0 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
13fc0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
13fd0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
13fe0 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
13ff0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
14000 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
14010 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
14020 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
14030 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
14040 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
14050 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
14060 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
14070 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
14080 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14090 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
140a0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
140b0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
140c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
140d0 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
140e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
140f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
14100 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
14110 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
14120 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
14130 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14140 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a  p->zErrMsg, db,.
14150 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
14160 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
14170 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
14180 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
14190 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
141a0 0a 20 20 20 20 20 20 20 20 28 72 6f 6c 6c 62 61  .        (rollba
141b0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
141c0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
141d0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
141e0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
141f0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
14200 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
14210 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
14220 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
14230 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
14240 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
14250 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
14260 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
14270 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67   * * *.**.** Beg
14280 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
14290 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  .  The transacti
142a0 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43  on ends when a C
142b0 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63  ommit or Rollbac
142c0 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65  k.** opcode is e
142d0 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70  ncountered.  Dep
142e0 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e  ending on the ON
142f0 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e   CONFLICT settin
14300 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61  g, the.** transa
14310 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f  ction might also
14320 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
14330 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  if an error is e
14340 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a  ncountered..**.*
14350 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
14360 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
14370 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
14380 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14390 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
143a0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
143b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
143c0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
143d0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
143e0 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
143f0 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
14400 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
14410 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
14420 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
14430 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
14440 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
14450 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
14460 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
14470 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   A RESERVED lock
14480 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20   is.** obtained 
14490 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
144a0 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74  file when a writ
144b0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
144c0 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a   started.  No.**
144d0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63   other process c
144e0 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72  an start another
144f0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
14500 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72  on while this tr
14510 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
14520 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74  underway.  Start
14530 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e  ing a write tran
14540 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65  saction also cre
14550 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ates a rollback 
14560 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72  journal. A.** wr
14570 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
14580 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
14590 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67  before any chang
145a0 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
145b0 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
145c0 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f  e.  If P2 is 2 o
145d0 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61  r greater then a
145e0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
145f0 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65   is also obtaine
14600 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65  d.** on the file
14610 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
14620 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
14630 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  ad-lock is obtai
14640 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
14650 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73  ase file..*/.cas
14660 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
14670 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
14680 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65 65 20 2a  p->p1;.  Btree *
14690 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
146a0 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44  i>=0 && i<db->nD
146b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
146c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
146d0 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 70  1<<i))!=0 );.  p
146e0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
146f0 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
14700 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
14710 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
14720 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
14730 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
14740 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
14750 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
14760 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
14770 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
14780 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
14790 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
147a0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
147b0 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OK && rc!=SQLITE
147c0 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20  _READONLY /* && 
147d0 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
147e0 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  */ ){.      goto
147f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14800 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
14810 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14820 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
14830 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
14840 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
14850 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
14860 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
14870 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
14880 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
14890 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =0 is the schema
148a0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31   version.  P3==1
148b0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
148c0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
148d0 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  2 is the recomme
148e0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
148f0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
14900 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
14910 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
14920 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
14930 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
14940 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
14950 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
14960 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
14970 20 49 66 20 50 31 20 69 73 20 6e 65 67 61 74 69   If P1 is negati
14980 76 65 2c 20 74 68 65 6e 20 74 68 69 73 20 69 73  ve, then this is
14990 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65   a request to re
149a0 61 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  ad the size of a
149b0 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 66 72  .** databases fr
149c0 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d 75 73 74  ee-list. P3 must
149d0 20 62 65 20 73 65 74 20 74 6f 20 31 20 69 6e 20   be set to 1 in 
149e0 74 68 69 73 20 63 61 73 65 2e 20 54 68 65 20 61  this case. The a
149f0 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ctual.** databas
14a00 65 20 61 63 63 65 73 73 65 64 20 69 73 20 28 28  e accessed is ((
14a10 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65  P1+1)*-1). For e
14a20 78 61 6d 70 6c 65 2c 20 61 20 50 31 20 70 61 72  xample, a P1 par
14a30 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20  ameter of -1.** 
14a40 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 64  corresponds to d
14a50 61 74 61 62 61 73 65 20 30 20 28 22 6d 61 69 6e  atabase 0 ("main
14a60 22 29 2c 20 61 20 50 31 20 6f 66 20 2d 32 20 69  "), a P1 of -2 i
14a70 73 20 64 61 74 61 62 61 73 65 20 31 20 28 22 74  s database 1 ("t
14a80 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  emp")..**.** The
14a90 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61  re must be a rea
14aa0 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d-lock on the da
14ab0 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61  tabase (either a
14ac0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
14ad0 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
14ae0 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65  or there must be
14af0 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29   an open cursor)
14b00 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75   before.** execu
14b10 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  ting this instru
14b20 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
14b30 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20  P_ReadCookie: { 
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b50 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
14b60 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
14b70 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70  .  int iDb = pOp
14b80 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f  ->p1;.  int iCoo
14b90 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a  kie = pOp->p3;..
14ba0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14bb0 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
14bc0 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66 28 20 69  _META );.  if( i
14bd0 44 62 3c 30 20 29 7b 0a 20 20 20 20 69 44 62 20  Db<0 ){.    iDb 
14be0 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a  = (-1*(iDb+1));.
14bf0 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d      iCookie *= -
14c00 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  1;.  }.  assert(
14c10 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
14c20 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
14c30 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
14c40 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
14c50 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
14c60 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
14c70 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e  0 );.  /* The in
14c80 64 65 78 69 6e 67 20 6f 66 20 6d 65 74 61 20 76  dexing of meta v
14c90 61 6c 75 65 73 20 61 74 20 74 68 65 20 73 63 68  alues at the sch
14ca0 65 6d 61 20 6c 61 79 65 72 20 69 73 20 6f 66 66  ema layer is off
14cb0 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a   by one from.  *
14cc0 2a 20 74 68 65 20 69 6e 64 65 78 69 6e 67 20 69  * the indexing i
14cd0 6e 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  n the btree laye
14ce0 72 2e 20 20 54 68 65 20 62 74 72 65 65 20 63 6f  r.  The btree co
14cf0 6e 73 69 64 65 72 73 20 6d 65 74 61 5b 30 5d 20  nsiders meta[0] 
14d00 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68 65 20 6e  to.  ** be the n
14d10 75 6d 62 65 72 20 6f 66 20 66 72 65 65 20 70 61  umber of free pa
14d20 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
14d30 61 73 65 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79  ase (a read-only
14d40 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64   value).  ** and
14d50 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74   meta[1] to be t
14d60 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
14d70 2e 20 20 54 68 65 20 73 63 68 65 6d 61 20 6c 61  .  The schema la
14d80 79 65 72 20 63 6f 6e 73 69 64 65 72 73 0a 20 20  yer considers.  
14d90 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65  ** meta[1] to be
14da0 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
14db0 69 65 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20  ie.  So we have 
14dc0 74 6f 20 73 68 69 66 74 20 74 68 65 20 69 6e 64  to shift the ind
14dd0 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69  ex.  ** by one i
14de0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
14df0 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  statement..  */.
14e00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14e10 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
14e20 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b  Db[iDb].pBt, 1 +
14e30 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
14e40 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
14e50 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
14e60 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
14e70 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
14e80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14e90 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
14ea0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
14eb0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
14ec0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
14ed0 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
14ee0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
14ef0 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
14f00 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
14f10 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d  abase P1..** P2=
14f20 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =0 is the schema
14f30 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31   version.  P2==1
14f40 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
14f50 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d   format..** P2==
14f60 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  2 is the recomme
14f70 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
14f80 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
14f90 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
14fa0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
14fb0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
14fc0 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
14fd0 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
14fe0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
14ff0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
15000 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
15010 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
15020 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
15030 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
15040 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
15050 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
15060 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
15070 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15080 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
15090 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
150a0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
150b0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
150c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
150d0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
150e0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
150f0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
15100 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
15110 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
15120 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  =0 );.  sqlite3V
15130 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
15140 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
15150 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
15160 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
15170 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
15180 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15190 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
151a0 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32  ->pBt, 1+pOp->p2
151b0 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
151c0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
151d0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ==0 ){.    /* Wh
151e0 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
151f0 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
15200 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
15210 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
15220 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
15230 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
15240 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
15250 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
15260 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
15270 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
15280 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
15290 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  1 ){.    /* Reco
152a0 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
152b0 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
152c0 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
152d0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
152e0 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
152f0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
15300 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
15310 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
15320 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
15330 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
15340 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
15350 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
15360 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
15370 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
15380 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
15390 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
153a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
153b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
153c0 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
153d0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
153e0 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
153f0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
15400 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
15410 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
15420 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
15430 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
15440 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
15450 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
15460 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
15470 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
15480 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
15490 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
154a0 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
154b0 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
154c0 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
154d0 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
154e0 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
154f0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
15500 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
15510 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
15520 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
15530 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
15540 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
15550 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
15560 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
15570 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
15580 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
15590 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
155a0 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
155b0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
155c0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
155d0 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
155e0 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
155f0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
15600 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
15610 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
15620 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
15630 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
15640 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
15650 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
15660 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
15670 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
15680 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
15690 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
156a0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
156b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
156c0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
156d0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
156e0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
156f0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
15700 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
15710 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
15720 65 74 4d 65 74 61 28 70 42 74 2c 20 31 2c 20 28  etMeta(pBt, 1, (
15730 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
15740 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
15750 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
15760 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
15770 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
15780 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d 70 4f 70  OK && iMeta!=pOp
15790 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
157a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
157b0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
157c0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
157d0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
157e0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
157f0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
15800 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
15810 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
15820 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
15830 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
15840 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
15850 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
15860 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
15870 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
15880 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
15890 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
158a0 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
158b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
158c0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
158d0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
158e0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
158f0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
15900 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
15910 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
15920 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
15930 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
15940 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
15950 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
15960 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
15970 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
15980 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
15990 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
159a0 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
159b0 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
159c0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
159d0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
159e0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
159f0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
15a00 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
15a10 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
15a20 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
15a30 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
15a40 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
15a50 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
15a60 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
15a70 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
15a80 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
15a90 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
15aa0 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
15ab0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
15ac0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
15ad0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
15ae0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
15af0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
15b00 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
15b10 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
15b20 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
15b30 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
15b40 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
15b50 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
15b60 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
15b70 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
15b80 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
15b90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
15ba0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
15bb0 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
15bc0 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
15bd0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
15be0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
15bf0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
15c00 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
15c10 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
15c20 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
15c30 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
15c40 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
15c50 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
15c60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
15c70 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
15c80 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
15c90 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
15ca0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
15cb0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
15cc0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
15cd0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
15ce0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
15cf0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
15d00 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
15d10 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
15d20 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
15d30 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
15d40 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
15d50 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
15d60 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
15d70 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
15d80 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
15d90 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
15da0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
15db0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
15dc0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
15dd0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
15de0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
15df0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
15e00 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
15e10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
15e20 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
15e30 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
15e40 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
15e50 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
15e60 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
15e70 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
15e80 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
15e90 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
15ea0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
15eb0 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
15ec0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
15ed0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
15ee0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
15ef0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
15f00 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
15f10 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
15f20 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
15f30 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
15f40 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
15f50 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
15f60 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
15f70 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
15f80 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
15f90 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
15fa0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
15fb0 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
15fc0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
15fd0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
15fe0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
15ff0 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 61 20  e P4 value is a 
16000 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
16010 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
16020 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a  hat defines the.
16030 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  ** content and c
16040 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
16050 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50  e of indices.  P
16060 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75  4 is NULL for cu
16070 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72  rsors.** that ar
16080 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74  e not pointing t
16090 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a  o indices..**.**
160a0 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72   See also OpenWr
160b0 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ite..*/./* Opcod
160c0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
160d0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
160e0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
160f0 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
16100 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
16110 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
16120 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
16130 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
16140 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
16150 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
16160 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
16170 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
16180 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
16190 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
161a0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
161b0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
161c0 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e 64  e.** content and
161d0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
161e0 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20  nce of indices. 
161f0 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20   P4 is NULL for 
16200 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74 20  cursors.** that 
16210 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e 67  are not pointing
16220 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a   to indices..**.
16230 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
16240 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
16250 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
16260 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
16270 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
16280 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
16290 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
162a0 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
162b0 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
162c0 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
162d0 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
162e0 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
162f0 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
16300 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
16310 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
16320 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
16330 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
16340 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  e: {.  int i = p
16350 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32  Op->p1;.  int p2
16360 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e   = pOp->p2;.  in
16370 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b  t iDb = pOp->p3;
16380 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
16390 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
163a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
163b0 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20    Db *pDb;.  .  
163c0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
163d0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
163e0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
163f0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
16400 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
16410 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
16420 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
16430 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
16440 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
16450 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
16460 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
16470 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  lag = 1;.    if(
16480 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
16490 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
164a0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
164b0 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
164c0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
164d0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
164e0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
164f0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16500 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
16510 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
16520 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
16530 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
16540 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  t( p2<=p->nMem )
16550 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d  ;.    pIn2 = &p-
16560 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73  >aMem[p2];.    s
16570 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
16580 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
16590 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
165a0 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 66 28 20  2->u.i;.    if( 
165b0 70 32 3c 32 20 29 20 7b 0a 20 20 20 20 20 20 72  p2<2 ) {.      r
165c0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
165d0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
165e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
165f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
16600 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  }.  assert( i>=0
16610 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   );.  pCur = all
16620 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69  ocateCursor(p, i
16630 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 69 44 62 2c  , &pOp[-1], iDb,
16640 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
16650 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
16660 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
16670 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
16680 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
16690 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
166a0 20 70 4f 70 2d 3e 70 34 2e 70 2c 20 70 43 75 72   pOp->p4.p, pCur
166b0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 69 66  ->pCursor);.  if
166c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
166d0 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
166e0 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
166f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
16700 66 6f 3b 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b  fo;.    pCur->pK
16710 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
16720 43 28 70 2d 3e 64 62 29 3b 0a 20 20 7d 65 6c 73  C(p->db);.  }els
16730 65 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65  e{.    pCur->pKe
16740 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  yInfo = 0;.  }. 
16750 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20   switch( rc ){. 
16760 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
16770 55 53 59 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e  USY: {.      p->
16780 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
16790 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
167a0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
167b0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
167c0 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
167d0 53 51 4c 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20  SQLITE_OK: {.   
167e0 20 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 73     int flags = s
167f0 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
16800 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b  (pCur->pCursor);
16810 0a 20 20 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  .      /* Sanity
16820 20 63 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79   checking.  Only
16830 20 74 68 65 20 6c 6f 77 65 72 20 66 6f 75 72 20   the lower four 
16840 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
16850 73 20 62 79 74 65 20 73 68 6f 75 6c 64 0a 20 20  s byte should.  
16860 20 20 20 20 2a 2a 20 62 65 20 75 73 65 64 2e 20      ** be used. 
16870 20 42 69 74 20 33 20 28 6d 61 73 6b 20 30 78 30   Bit 3 (mask 0x0
16880 38 29 20 69 73 20 75 6e 70 72 65 64 69 63 74 61  8) is unpredicta
16890 62 6c 65 2e 20 20 54 68 65 20 6c 6f 77 65 72 20  ble.  The lower 
168a0 33 20 62 69 74 73 0a 20 20 20 20 20 20 2a 2a 20  3 bits.      ** 
168b0 28 6d 61 73 6b 20 30 78 30 37 29 20 73 68 6f 75  (mask 0x07) shou
168c0 6c 64 20 62 65 20 65 69 74 68 65 72 20 35 20 28  ld be either 5 (
168d0 69 6e 74 6b 65 79 2b 6c 65 61 66 64 61 74 61 20  intkey+leafdata 
168e0 66 6f 72 20 74 61 62 6c 65 73 29 20 6f 72 0a 20  for tables) or. 
168f0 20 20 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64       ** 2 (zerod
16900 61 74 61 20 66 6f 72 20 69 6e 64 69 63 65 73 29  ata for indices)
16910 2e 20 20 49 66 20 74 68 65 73 65 20 63 6f 6e 64  .  If these cond
16920 69 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d  itions are not m
16930 65 74 20 69 74 20 63 61 6e 0a 20 20 20 20 20 20  et it can.      
16940 2a 2a 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61  ** only mean tha
16950 74 20 77 65 20 61 72 65 20 64 65 61 6c 69 6e 67  t we are dealing
16960 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
16970 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
16980 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
16990 20 28 66 6c 61 67 73 20 26 20 30 78 66 30 29 21   (flags & 0xf0)!
169a0 3d 30 20 7c 7c 20 28 28 66 6c 61 67 73 20 26 20  =0 || ((flags & 
169b0 30 78 30 37 29 21 3d 35 20 26 26 20 28 66 6c 61  0x07)!=5 && (fla
169c0 67 73 20 26 20 30 78 30 37 29 21 3d 32 29 20 29  gs & 0x07)!=2) )
169d0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
169e0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
169f0 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
16a00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16a10 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
16a20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65     pCur->isTable
16a30 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52 45   = (flags & BTRE
16a40 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 3f 31 3a  E_INTKEY)!=0 ?1:
16a50 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69  0;.      pCur->i
16a60 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67 73 20  sIndex = (flags 
16a70 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  & BTREE_ZERODATA
16a80 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 20  )!=0 ?1:0;.     
16a90 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69 74 20   /* If P4==0 it 
16aa0 6d 65 61 6e 73 20 77 65 20 61 72 65 20 65 78 70  means we are exp
16ab0 65 63 74 65 64 20 74 6f 20 6f 70 65 6e 20 61 20  ected to open a 
16ac0 74 61 62 6c 65 2e 20 20 49 66 20 50 34 21 3d 30  table.  If P4!=0
16ad0 20 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77   then.      ** w
16ae0 65 20 65 78 70 65 63 74 20 74 6f 20 62 65 20 6f  e expect to be o
16af0 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e  pening an index.
16b00 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74    If this is not
16b10 20 77 68 61 74 20 68 61 70 70 65 6e 65 64 2c 0a   what happened,.
16b20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
16b30 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6f  e database is co
16b40 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20  rrupt.      */. 
16b50 20 20 20 20 20 69 66 28 20 28 70 43 75 72 2d 3e       if( (pCur->
16b60 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e  isTable && pOp->
16b70 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
16b80 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 70  FO).       || (p
16b90 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 26 26 20  Cur->isIndex && 
16ba0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
16bb0 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20  KEYINFO) ){.    
16bc0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16bd0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
16be0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
16bf0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16c00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
16c10 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
16c20 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a  se SQLITE_EMPTY:
16c30 20 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69   {.      pCur->i
16c40 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
16c50 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
16c60 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  ;.      pCur->is
16c70 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69  Index = !pCur->i
16c80 73 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 70 43  sTable;.      pC
16c90 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b  ur->pCursor = 0;
16ca0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16cb0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65  TE_OK;.      bre
16cc0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ak;.    }.    de
16cd0 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67  fault: {.      g
16ce0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16cf0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
16d00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
16d10 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
16d20 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
16d30 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  4 *.**.** Open a
16d40 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
16d50 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
16d60 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
16d70 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
16d80 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
16d90 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
16da0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
16db0 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
16dc0 74 72 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72  transient or vir
16dd0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  tual.** table is
16de0 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
16df0 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
16e00 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
16e10 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
16e20 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
16e30 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75  mns in the virtu
16e40 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
16e50 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
16e60 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
16e70 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
16e80 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
16e90 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
16ea0 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
16eb0 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
16ec0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
16ed0 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
16ee0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
16ef0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
16f00 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  index..**.** Thi
16f10 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63  s opcode was onc
16f20 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d  e called OpenTem
16f30 70 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65  p.  But that cre
16f40 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f  ated.** confusio
16f50 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65  n because the te
16f60 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c  rm "temp table",
16f70 20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74   might refer eit
16f80 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50  her.** to a TEMP
16f90 20 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51   table at the SQ
16fa0 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61  L level, or to a
16fb0 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79   table opened by
16fc0 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
16fd0 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f    Then this opco
16fe0 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e  de was call Open
16ff0 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a  Virtual.  But.**
17000 20 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f   that created co
17010 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65  nfusion with the
17020 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74   whole virtual-t
17030 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61  able idea..*/.ca
17040 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
17050 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ral: {.  int i =
17060 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
17070 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73  Cursor *pCx;.  s
17080 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
17090 6f 70 65 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20  openFlags = .   
170a0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
170b0 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
170c0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
170d0 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
170e0 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
170f0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
17100 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
17110 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
17120 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
17130 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28  T_DB;..  assert(
17140 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d   i>=0 );.  pCx =
17150 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
17160 70 2c 20 69 2c 20 70 4f 70 2c 20 2d 31 2c 20 31  p, i, pOp, -1, 1
17170 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
17180 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
17190 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
171a0 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
171b0 33 42 74 72 65 65 46 61 63 74 6f 72 79 28 64 62  3BtreeFactory(db
171c0 2c 20 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44  , 0, 1, SQLITE_D
171d0 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48  EFAULT_TEMP_CACH
171e0 45 5f 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67  E_SIZE, openFlag
171f0 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s,.             
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70                &p
17210 43 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20  Cx->pBt);.  if( 
17220 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
17230 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
17240 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
17250 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20  (pCx->pBt, 1);. 
17260 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
17270 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
17280 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
17290 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
172a0 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
172b0 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
172c0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
172d0 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
172e0 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  e BTREE_ZERODATA
172f0 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
17300 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
17310 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
17320 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
17330 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
17340 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
17350 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
17360 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
17370 20 31 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61   1 (an INTKEY ta
17380 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
17390 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65   if( pOp->p4.pKe
173a0 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69  yInfo ){.      i
173b0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
173c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
173d0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
173e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
173f0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
17400 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
17410 70 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f  pgno, BTREE_ZERO
17420 44 41 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66  DATA); .      if
17430 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
17440 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
17450 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
17460 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
17470 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17480 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
17490 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20  Bt, pgno, 1, .  
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b                (K
174c0 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e  eyInfo*)pOp->p4.
174d0 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  z, pCx->pCursor)
174e0 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
174f0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
17500 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
17510 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
17520 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
17530 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
17540 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
17550 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
17560 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17570 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
17580 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
17590 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
175a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
175b0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
175c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
175d0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
175e0 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
175f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17600 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
17610 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
17620 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
17630 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
17640 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
17650 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
17660 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
17670 61 74 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70  ata.  Any attemp
17680 74 20 74 6f 20 77 72 69 74 65 20 61 20 73 65 63  t to write a sec
17690 6f 6e 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20  ond row of data 
176a0 63 61 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69  causes the.** fi
176b0 72 73 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65  rst row to be de
176c0 6c 65 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61  leted.  All data
176d0 20 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e   is deleted when
176e0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
176f0 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  * closed..**.** 
17700 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
17710 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
17720 70 63 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20  pcode is useful 
17730 66 6f 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a  for holding the.
17740 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61  ** NEW or OLD ta
17750 62 6c 65 73 20 69 6e 20 61 20 74 72 69 67 67 65  bles in a trigge
17760 72 2e 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f  r.  Also used to
17770 20 68 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67   hold the a sing
17780 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
17790 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
177a0 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
177b0 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
177c0 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
177d0 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
177e0 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
177f0 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
17800 57 68 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69  When OP_Insert i
17810 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e  s executed to in
17820 73 65 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f  sert a row in to
17830 20 74 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c   the pseudo tabl
17840 65 2c 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  e,.** the pseudo
17850 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61  -table cursor ma
17860 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b  y or may not mak
17870 65 20 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20  e it's own copy 
17880 6f 66 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  of the.** origin
17890 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20  al row data. If 
178a0 50 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68  P2 is 0, then th
178b0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77  e pseudo-table w
178c0 69 6c 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20  ill copy the.** 
178d0 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74  original row dat
178e0 61 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20  a. Otherwise, a 
178f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
17900 72 69 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63  riginal memory c
17910 65 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  ell.** is stored
17920 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
17930 74 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d  the vdbe program
17940 20 6d 75 73 74 20 65 6e 73 75 72 65 20 74 68 61   must ensure tha
17950 74 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  t the .** memory
17960 20 63 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67   cell containing
17970 20 74 68 65 20 72 6f 77 20 64 61 74 61 20 69 73   the row data is
17980 20 6e 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e   not overwritten
17990 20 75 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73   until the.** ps
179a0 65 75 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c  eudo table is cl
179b0 6f 73 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72  osed (or a new r
179c0 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
179d0 6e 74 6f 20 69 74 29 2e 0a 2a 2f 0a 63 61 73 65  nto it)..*/.case
179e0 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
179f0 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
17a00 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
17a10 72 20 2a 70 43 78 3b 0a 20 20 61 73 73 65 72 74  r *pCx;.  assert
17a20 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  ( i>=0 );.  pCx 
17a30 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
17a40 28 70 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c  (p, i, &pOp[-1],
17a50 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
17a60 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
17a70 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
17a80 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
17a90 70 73 65 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b  pseudoTable = 1;
17aa0 0a 20 20 70 43 78 2d 3e 65 70 68 65 6d 50 73 65  .  pCx->ephemPse
17ab0 75 64 6f 54 61 62 6c 65 20 3d 20 28 75 38 29 70  udoTable = (u8)p
17ac0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
17ad0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
17ae0 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a  x->isIndex = 0;.
17af0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17b00 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
17b10 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
17b20 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
17b30 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
17b40 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
17b50 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
17b60 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
17b70 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
17b80 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
17b90 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  lose: {.  int i 
17ba0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
17bb0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
17bc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
17bd0 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
17be0 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
17bf0 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  [i]);.  p->apCsr
17c00 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  [i] = 0;.  break
17c10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17c20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20  SeekGe P1 P2 P3 
17c30 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
17c40 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
17c50 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
17c60 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
17c70 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
17c80 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
17c90 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
17ca0 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
17cb0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
17cc0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
17cd0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
17ce0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
17cf0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
17d00 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
17d10 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
17d20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
17d30 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
17d40 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
17d50 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
17d60 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
17d70 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
17d80 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
17d90 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
17da0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
17db0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
17dc0 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
17dd0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
17de0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
17df0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
17e00 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
17e10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
17e20 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
17e30 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
17e40 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
17e50 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
17e60 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
17e70 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
17e80 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
17e90 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
17ea0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
17eb0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
17ec0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
17ed0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
17ee0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
17ef0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
17f00 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
17f10 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
17f20 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
17f30 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
17f40 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
17f50 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
17f60 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
17f70 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
17f80 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
17f90 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
17fa0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
17fb0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
17fc0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
17fd0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
17fe0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
17ff0 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
18000 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
18010 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
18020 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
18030 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
18040 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
18050 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
18060 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
18070 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
18080 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20  e: SeekLt P1 P2 
18090 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49  P3 P4 * .**.** I
180a0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
180b0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
180c0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
180d0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
180e0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
180f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
18100 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
18110 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
18120 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
18130 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
18140 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
18150 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
18160 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
18170 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
18180 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
18190 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
181a0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
181b0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
181c0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
181d0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
181e0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
181f0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
18200 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
18210 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
18220 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
18230 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
18240 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
18250 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
18260 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
18270 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
18280 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
18290 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
182a0 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33   SeekLe P1 P2 P3
182b0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
182c0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
182d0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
182e0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
182f0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
18300 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
18310 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
18320 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
18330 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
18340 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
18350 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
18360 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
18370 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
18380 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
18390 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
183a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
183b0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
183c0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
183d0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
183e0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
183f0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
18400 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
18410 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
18420 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
18430 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
18440 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
18450 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
18460 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
18470 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
18480 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
18490 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
184a0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
184b0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
184c0 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
184d0 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20  P_SeekLt:       
184e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
184f0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65  /.case OP_SeekLe
18500 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
18510 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
18520 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20  P_SeekGe:       
18530 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
18540 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74  /.case OP_SeekGt
18550 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
18560 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
18570 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
18580 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
18590 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
185a0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
185b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
185c0 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
185d0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
185e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
185f0 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
18600 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  or!=0 ){.    int
18610 20 72 65 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63   res, oc;.    oc
18620 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
18630 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
18640 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  = 0;.    if( pC-
18650 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
18660 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
18670 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
18680 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
18690 2a 2f 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  */..      /* The
186a0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
186b0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
186c0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
186d0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
186e0 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
186f0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
18700 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
18710 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
18720 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
18730 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
18740 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
18750 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
18760 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
18770 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
18780 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
18790 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  In3);.      pC->
187a0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
187b0 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ;..      /* If t
187c0 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
187d0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
187e0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
187f0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20  er without.     
18800 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
18810 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
18820 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
18830 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
18840 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
18850 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
18860 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
18870 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
18880 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
18890 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
188a0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
188b0 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
188c0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
188d0 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
188e0 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  ,.          ** t
188f0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
18900 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
18910 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
18920 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
18930 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
18940 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
18950 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
18960 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
18970 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68  s point, then th
18980 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
18990 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20  be a floating.  
189a0 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e        ** point n
189b0 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  umber. */.      
189c0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
189d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
189e0 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  l)!=0 );..      
189f0 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c    if( iKey==SMAL
18a00 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70  LEST_INT64 && (p
18a10 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
18a20 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30  Key || pIn3->r>0
18a30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  ) ){.          /
18a40 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
18a50 73 20 74 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61  s to large in ma
18a60 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78  gnitude to be ex
18a70 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20  pressed as an.  
18a80 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
18a90 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  er. */.         
18aa0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
18ab0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c      if( pIn3->r<
18ac0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
18ad0 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
18ae0 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Gt || oc==OP_See
18af0 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kGe ){.         
18b00 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18b10 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e  3BtreeFirst(pC->
18b20 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18b40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18b50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18b60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18b70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18b80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18b90 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50        if( oc==OP
18ba0 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
18bb0 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
18bc0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
18bd0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
18be0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
18bf0 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
18c00 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18c10 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
18c20 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
18c30 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
18c40 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18c50 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
18c60 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
18c70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
18c80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18c90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
18ca0 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f   }else if( oc==O
18cb0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
18cc0 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20  OP_SeekGe ){.   
18cd0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
18ce0 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63  e ceiling() func
18cf0 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
18d00 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
18d10 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
18d20 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r > (double)iKe
18d30 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20  y ) iKey++;.    
18d40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18d50 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
18d60 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e  floor() function
18d70 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
18d80 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
18d90 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
18da0 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d  P_SeekLe || oc==
18db0 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
18dc0 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
18dd0 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r < (double)iKe
18de0 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20  y ) iKey--;.    
18df0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20      }.      } . 
18e00 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18e10 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
18e20 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
18e30 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
18e40 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
18e50 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18e60 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
18e70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18e80 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
18e90 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
18ea0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  {.        pC->ro
18eb0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a  widIsValid = 1;.
18ec0 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74          pC->last
18ed0 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
18ee0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
18ef0 0a 20 20 20 20 20 20 55 6e 70 61 63 6b 65 64 52  .      UnpackedR
18f00 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 20 20 69  ecord r;.      i
18f10 6e 74 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  nt nField = pOp-
18f20 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73  >p4.i;.      ass
18f30 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
18f40 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
18f50 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
18f60 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e  ld>0 );.      r.
18f70 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
18f80 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
18f90 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
18fa0 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28  Field;.      if(
18fb0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc==OP_SeekGt |
18fc0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
18fd0 29 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61  ){.        r.fla
18fe0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
18ff0 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c  CRKEY;.      }el
19000 73 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c  se{.        r.fl
19010 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ags = 0;.      }
19020 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  .      r.aMem = 
19030 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
19040 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ];.      rc = sq
19050 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
19060 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
19070 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
19080 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
19090 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
190a0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
190b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
190c0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
190d0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
190e0 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  d = 0;.    }.   
190f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
19100 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
19110 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
19120 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
19130 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
19140 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
19150 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
19160 66 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50  f.    if( oc==OP
19170 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGe || oc==O
19180 50 5f 53 65 65 6b 47 74 20 29 7b 0a 20 20 20 20  P_SeekGt ){.    
19190 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
191a0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
191b0 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20  _SeekGt) ){.    
191c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
191d0 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43  BtreeNext(pC->pC
191e0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
191f0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19200 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
19210 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19220 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
19230 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
19240 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
19250 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
19260 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
19270 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
19280 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
19290 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
192a0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3e  ;.      if( res>
192b0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
192c0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29  oc==OP_SeekLt) )
192d0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
192e0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
192f0 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ous(pC->pCursor,
19300 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
19310 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19320 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
19330 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19340 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
19350 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
19360 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19370 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
19380 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
19390 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
193a0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
193b0 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66         ** see if
193c0 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
193d0 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
193e0 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
193f0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
19400 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
19410 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
19420 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
19430 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
19440 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
19450 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
19460 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70  }else if( !pC->p
19470 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
19480 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
19490 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
194a0 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
194b0 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
194c0 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
194d0 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
194e0 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
194f0 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
19500 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
19510 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
19520 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
19530 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
19540 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
19550 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
19560 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
19570 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19580 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
19590 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
195a0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
195b0 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
195c0 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
195d0 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
195e0 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
195f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
19600 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
19610 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
19620 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
19630 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
19640 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
19650 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
19660 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
19670 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
19680 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
19690 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
196a0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
196b0 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
196c0 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
196d0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69     /* in2 */.  i
196e0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
196f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
19700 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
19710 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
19720 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
19730 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
19740 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
19750 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
19760 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
19770 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
19780 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
19790 20 30 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65   0;.    pC->move
197a0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
197b0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
197c0 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  In2);.    pC->ro
197d0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
197e0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
197f0 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a  Moveto = 1;.  }.
19800 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
19810 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
19820 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
19830 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68  ** Register P3 h
19840 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
19850 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
19860 65 63 6f 72 64 2e 20 20 50 31 20 69 73 20 61 6e  ecord.  P1 is an
19870 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e   index..** If an
19880 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
19890 68 65 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e  hes the value in
198a0 20 72 65 67 69 73 74 65 72 20 70 33 20 65 78 69   register p3 exi
198b0 73 74 73 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a  sts in P1 then.*
198c0 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
198d0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 64  f the P3 value d
198e0 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
198f0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a  y entry in P1.**
19900 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
19910 20 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20    The P1 cursor 
19920 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
19930 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
19940 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74 20   entry.** if it 
19950 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
19960 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
19970 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
19980 65 6e 74 20 74 68 65 20 49 4e 20 6f 70 65 72 61  ent the IN opera
19990 74 6f 72 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  tor where the.**
199a0 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
199b0 69 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  is a SELECT stat
199c0 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79 20 62  ement.  P1 may b
199d0 65 20 61 20 74 72 75 65 20 69 6e 64 65 78 2c 20  e a true index, 
199e0 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20  or it.** may be 
199f0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
19a00 78 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  x that holds the
19a10 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
19a20 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d  SELECT.** statem
19a30 65 6e 74 2e 20 20 20 54 68 69 73 20 69 6e 73 74  ent.   This inst
19a40 72 75 63 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ruction is also 
19a50 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
19a60 74 20 74 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43  t the.** DISTINC
19a70 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 53 45 4c  T keyword in SEL
19a80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
19a90 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
19aa0 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
19ab0 20 69 6e 64 65 78 20 50 31 20 63 6f 6e 74 61 69   index P1 contai
19ac0 6e 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72 20  ns a record for 
19ad0 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 66 69  which .** the fi
19ae0 72 73 74 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  rst N serialized
19af0 20 76 61 6c 75 65 73 20 65 78 61 63 74 6c 79 20   values exactly 
19b00 6d 61 74 63 68 20 74 68 65 20 4e 20 73 65 72 69  match the N seri
19b10 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a  alized values.**
19b20 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
19b30 6e 20 72 65 67 69 73 74 65 72 20 50 33 2c 20 77  n register P3, w
19b40 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 74 6f  here N is the to
19b50 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  tal number of va
19b60 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50  lues in.** the P
19b70 33 20 72 65 63 6f 72 64 20 28 74 68 65 20 50 33  3 record (the P3
19b80 20 72 65 63 6f 72 64 20 69 73 20 61 20 70 72 65   record is a pre
19b90 66 69 78 20 6f 66 20 74 68 65 20 50 31 20 72 65  fix of the P1 re
19ba0 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65  cord). .**.** Se
19bb0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
19bc0 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45  , IsUnique, NotE
19bd0 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  xists.*/./* Opco
19be0 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
19bf0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
19c00 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  Register P3 hold
19c10 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
19c20 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
19c30 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e  rd.  P1 is.** an
19c40 20 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f 20 65   index.  If no e
19c50 6e 74 72 79 20 65 78 69 73 74 73 20 69 6e 20 50  ntry exists in P
19c60 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  1 that matches t
19c70 68 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d  he blob then jum
19c80 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49 66 20  p.** to P2.  If 
19c90 61 6e 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78  an entry does ex
19ca0 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72  isting, fall thr
19cb0 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
19cc0 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69  r is left.** poi
19cd0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 65 6e 74  nting to the ent
19ce0 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 2e  ry that matches.
19cf0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
19d00 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
19d10 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
19d20 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
19d30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
19d40 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
19d50 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
19d60 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
19d70 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
19d80 3b 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  ;.  int alreadyE
19d90 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 56 64 62  xists = 0;.  Vdb
19da0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
19db0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
19dc0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
19dd0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
19de0 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
19df0 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
19e00 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20  i])->pCursor!=0 
19e10 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
19e20 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
19e30 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 0a 20 20  rd *pIdxKey;..  
19e40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
19e50 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
19e60 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
19e70 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
19e80 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  ;.    pIdxKey = 
19e90 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
19ea0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
19eb0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
19ec0 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20  In3->z,.        
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54                aT
19ef0 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
19f00 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69  TempRec));.    i
19f10 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b  f( pIdxKey==0 ){
19f20 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
19f30 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  em;.    }.    if
19f40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
19f50 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20  P_Found ){.     
19f60 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20   pIdxKey->flags 
19f70 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  |= UNPACKED_PREF
19f80 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
19f90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19fa0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
19fb0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
19fc0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
19fd0 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69 74  &res);.    sqlit
19fe0 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61  e3VdbeDeleteUnpa
19ff0 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b  ckedRecord(pIdxK
1a000 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  ey);.    if( rc!
1a010 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a020 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1a030 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
1a040 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
1a050 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1a060 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1a070 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1a080 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1a090 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
1a0a0 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1a0b0 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
1a0c0 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1a0d0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
1a0e0 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
1a0f0 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1a100 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1a110 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1a120 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
1a130 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
1a140 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1a150 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1a160 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1a170 64 20 6e 75 6d 62 65 72 2e 20 20 43 61 6c 6c 20  d number.  Call 
1a180 74 68 69 73 0a 2a 2a 20 72 65 63 6f 72 64 20 6e  this.** record n
1a190 75 6d 62 65 72 20 52 2e 20 20 54 68 65 20 50 34  umber R.  The P4
1a1a0 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
1a1b0 6e 73 20 61 6e 20 69 6e 64 65 78 20 6b 65 79 20  ns an index key 
1a1c0 63 72 65 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  created.** using
1a1d0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 43 61   MakeRecord.  Ca
1a1e0 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50  ll it K..**.** P
1a1f0 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 20 20  1 is an index.  
1a200 53 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74  So it has no dat
1a210 61 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f  a and its key co
1a220 6e 73 69 73 74 73 20 6f 66 20 61 0a 2a 2a 20 72  nsists of a.** r
1a230 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64 20  ecord generated 
1a240 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  by OP_MakeRecord
1a250 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74 20   where the last 
1a260 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a  field is the .**
1a270 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65 6e   rowid of the en
1a280 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64  try that the ind
1a290 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ex refers to..**
1a2a0 20 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75   .** This instru
1a2b0 63 74 69 6f 6e 20 61 73 6b 73 20 69 66 20 74 68  ction asks if th
1a2c0 65 72 65 20 69 73 20 61 6e 20 65 6e 74 72 79 20  ere is an entry 
1a2d0 69 6e 20 50 31 20 77 68 65 72 65 20 74 68 65 0a  in P1 where the.
1a2e0 2a 2a 20 66 69 65 6c 64 73 20 6d 61 74 63 68 65  ** fields matche
1a2f0 73 20 4b 20 62 75 74 20 74 68 65 20 72 6f 77 69  s K but the rowi
1a300 64 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  d is different f
1a310 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20 74 68 65  rom R..** If the
1a320 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
1a330 74 72 79 2c 20 74 68 65 6e 20 74 68 65 72 65 20  try, then there 
1a340 69 73 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a  is an immediate.
1a350 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
1a360 49 66 20 61 6e 79 20 65 6e 74 72 79 20 64 6f 65  If any entry doe
1a370 73 20 65 78 69 73 74 20 77 68 65 72 65 20 74 68  s exist where th
1a380 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 0a 2a  e index string.*
1a390 2a 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20  * matches K but 
1a3a0 74 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  the record numbe
1a3b0 72 20 69 73 20 6e 6f 74 20 52 2c 20 74 68 65 6e  r is not R, then
1a3c0 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 6e   the record.** n
1a3d0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 65  umber for that e
1a3e0 6e 74 72 79 20 69 73 20 77 72 69 74 74 65 6e 20  ntry is written 
1a3f0 69 6e 74 6f 20 50 33 20 61 6e 64 20 63 6f 6e 74  into P3 and cont
1a400 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
1a410 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1a420 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1a430 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1a440 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74  tFound, NotExist
1a450 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65  s, Found.*/.case
1a460 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20   OP_IsUnique: { 
1a470 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1a480 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
1a490 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
1a4a0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1a4b0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1a4c0 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34    Mem *pK;.  i64
1a4d0 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68   R;..  /* Pop th
1a4e0 65 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68  e value R off th
1a4f0 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
1a500 63 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ck.  */.  assert
1a510 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a520 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
1a530 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
1a540 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
1a550 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d  ->nMem );.  pK =
1a560 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1a570 34 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  4.i];.  sqlite3V
1a580 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1a590 28 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49  (pIn3);.  R = pI
1a5a0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72  n3->u.i;.  asser
1a5b0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1a5c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78  nCursor );.  pCx
1a5d0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
1a5e0 20 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30    assert( pCx!=0
1a5f0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
1a600 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  x->pCursor;.  if
1a610 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
1a620 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69    int res;.    i
1a630 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1a640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a650 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74   record number t
1a660 68 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f  hat matches K */
1a670 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63  .    UnpackedRec
1a680 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20  ord *pIdxKey;   
1a690 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73  /* Unpacked vers
1a6a0 69 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20  ion of P4 */..  
1a6b0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b    /* Make sure K
1a6c0 20 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64   is a string and
1a6d0 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74   make zKey point
1a6e0 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20   to K.    */.   
1a6f0 20 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61   assert( pK->fla
1a700 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1a710 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
1a720 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1a730 55 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79  Unpack(pCx->pKey
1a740 49 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d  Info, pK->n, pK-
1a750 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  >z,.            
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52            aTempR
1a780 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1a790 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70  Rec));.    if( p
1a7a0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1a7b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1a7c0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
1a7d0 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1a7e0 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
1a7f0 44 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63  D;..    /* Searc
1a800 68 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69  h for an entry i
1a810 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62  n P1 where all b
1a820 75 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69  ut the last rowi
1a830 64 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a  d match K.    **
1a840 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
1a850 73 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70  such entry, jump
1a860 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1a870 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  P2..    */.    a
1a880 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1a890 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1a8a0 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53  .    pCx->cacheS
1a8b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1a8c0 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ALE;.    rc = sq
1a8d0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1a8e0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1a8f0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1a900 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
1a910 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a920 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1a930 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
1a940 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
1a950 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a960 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a970 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c    }.    if( res<
1a980 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
1a990 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1a9a0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
1a9b0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1a9c0 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1a9d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1a9e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
1a9f0 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
1aa00 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
1aa10 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1aa20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20   }.    }.    rc 
1aa30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
1aa40 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20  KeyCompare(pCx, 
1aa50 70 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20  pIdxKey, &res); 
1aa60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1aa70 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
1aa80 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
1aa90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1aaa0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1aab0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1aac0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
1aad0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1aae0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
1aaf0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
1ab00 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   /* At this poin
1ab10 74 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e  t, pCrsr is poin
1ab20 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79  ting to an entry
1ab30 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c   in P1 where all
1ab40 20 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20   but.    ** the 
1ab50 66 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65  final entry (the
1ab60 20 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20   rowid) matches 
1ab70 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  K.  Check to see
1ab80 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66   if the.    ** f
1ab90 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d  inal rowid colum
1aba0 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
1abb0 72 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71  rom R.  If it eq
1abc0 75 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70  uals R then jump
1abd0 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
1abe0 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a  ely to P2..    *
1abf0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
1ac00 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70  e3VdbeIdxRowid(p
1ac10 43 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69  Crsr, &v);.    i
1ac20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ac30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1ac40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ac50 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
1ac60 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70   v==R ){.      p
1ac70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ac80 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1ac90 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
1aca0 66 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20  final varint of 
1acb0 74 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65  the key is diffe
1acc0 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74  rent from R.  St
1acd0 6f 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20  ore it back.    
1ace0 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ** into register
1acf0 20 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72   R3.  (The recor
1ad00 64 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65  d number of an e
1ad10 6e 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74  ntry that violat
1ad20 65 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51  es.    ** a UNIQ
1ad30 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a  UE constraint.).
1ad40 20 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d      */.    pIn3-
1ad50 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73  >u.i = v;.    as
1ad60 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1ad70 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d  s&MEM_Int );.  }
1ad80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ad90 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
1ada0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
1adb0 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e  *.** Use the con
1adc0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1add0 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72   P3 as a integer
1ade0 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
1adf0 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
1ae00 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
1ae10 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
1ae20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
1ae30 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
1ae40 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
1ae50 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
1ae60 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  u.  The cursor i
1ae70 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
1ae80 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
1ae90 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
1aea0 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
1aeb0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
1aec0 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
1aed0 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
1aee0 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1aef0 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
1af00 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
1af10 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
1af20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
1af30 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
1af40 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
1af50 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
1af60 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
1af70 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
1af80 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
1af90 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1afa0 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
1afb0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1afc0 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1afd0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1afe0 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1aff0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b000 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1b010 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
1b020 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1b030 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1b040 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1b050 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
1b060 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
1b070 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
1b080 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
1b090 73 20 3d 20 30 3b 0a 20 20 20 20 75 36 34 20 69  s = 0;.    u64 i
1b0a0 4b 65 79 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Key;.    assert(
1b0b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1b0c0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
1b0d0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
1b0e0 5d 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  ]->isTable );.  
1b0f0 20 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65    iKey = intToKe
1b100 79 28 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  y(pIn3->u.i);.  
1b110 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b120 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1b130 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1b140 2c 20 30 2c 26 72 65 73 29 3b 0a 20 20 20 20 70  , 0,&res);.    p
1b150 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  C->lastRowid = p
1b160 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43  In3->u.i;.    pC
1b170 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b180 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
1b190 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1b1a0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1b1b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1b1c0 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 72 65  TALE;.    if( re
1b1d0 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63  s!=0 ){.      pc
1b1e0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1b1f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
1b200 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1b210 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  0 );.    }.  }el
1b220 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75  se if( !pC->pseu
1b230 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  doTable ){.    /
1b240 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1b250 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1b260 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1b270 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1b280 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1b290 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1b2a0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1b2b0 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
1b2c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1b2d0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1b2e0 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
1b2f0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1b300 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62  id==0 );.  }.  b
1b310 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1b320 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
1b330 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
1b340 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
1b350 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
1b360 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
1b370 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
1b380 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1b390 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
1b3a0 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
1b3b0 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
1b3c0 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
1b3d0 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
1b3e0 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
1b3f0 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
1b400 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
1b410 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1b420 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1b430 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1b440 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1b450 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1b460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1b470 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
1b480 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1b490 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43 6f 75 6e  pCsr[i]->seqCoun
1b4a0 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  t++;.  MemSetTyp
1b4b0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1b4c0 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
1b4d0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
1b4e0 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
1b4f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  * *.**.** Get a 
1b500 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
1b510 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
1b520 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
1b530 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
1b540 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
1b550 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
1b560 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
1b570 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
1b580 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
1b590 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
1b5a0 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
1b5b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
1b5c0 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
1b5d0 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
1b5e0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1b5f0 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
1b600 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
1b610 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c 61  hat holds the la
1b620 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1b630 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1b640 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f  cord number.  No
1b650 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1b660 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ers are allowed 
1b670 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68  to be less.** th
1b680 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20  an this value.  
1b690 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1b6a0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1b6b0 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46 55  mum, a SQLITE_FU
1b6c0 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 67  LL.** error is g
1b6d0 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20 50  enerated.  The P
1b6e0 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1b6f0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 67  dated with the g
1b700 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f  enerated.** reco
1b710 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  rd number.  This
1b720 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1b730 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1b740 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1b750 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1b760 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1b770 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1b780 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1b790 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1b7a0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1b7b0 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 56    i64 v = 0;.  V
1b7c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1b7d0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1b7e0 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1b7f0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1b800 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
1b810 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
1b820 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d  r[i])->pCursor==
1b830 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
1b840 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1b850 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1b860 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1b870 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1b880 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1b890 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1b8a0 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1b8b0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1b8c0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1b8d0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1b8e0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1b8f0 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1b900 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1b910 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1b920 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1b930 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1b940 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1b950 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1b960 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1b970 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1b980 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1b990 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1b9a0 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1b9b0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1b9c0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1b9d0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1b9e0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1b9f0 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1ba00 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1ba10 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1ba20 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1ba30 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1ba40 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1ba50 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1ba60 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1ba70 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1ba80 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1ba90 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1baa0 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1bab0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1bac0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1bad0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1bae0 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20  1000 times..    
1baf0 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61 20  **.    ** For a 
1bb00 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73 20  table with less 
1bb10 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65  than 2 billion e
1bb20 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f 62  ntries, the prob
1bb30 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  ability.    ** o
1bb40 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61 20  f not finding a 
1bb50 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73 20  unused rowid is 
1bb60 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e 20  about 1.0e-300. 
1bb70 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20 20   This is a .    
1bb80 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62  ** non-zero prob
1bb90 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74 20  ability, but it 
1bba0 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68 69  is still vanishi
1bbb0 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73  ngly small and s
1bbc0 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76  hould.    ** nev
1bbd0 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62 6c  er cause a probl
1bbe0 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75 63  em.  You are muc
1bbf0 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b  h, much more lik
1bc00 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20 20  ely to have a.  
1bc10 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66 61    ** hardware fa
1bc20 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20 74  ilure than for t
1bc30 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  his algorithm to
1bc40 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20   fail..    **.  
1bc50 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73 69    ** The analysi
1bc60 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  s in the previou
1bc70 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73 75  s paragraph assu
1bc80 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61 76  mes that you hav
1bc90 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20  e a good.    ** 
1bca0 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d  source of random
1bcb0 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61 20   numbers.  Is a 
1bcc0 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1bcd0 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a   like lrand48().
1bce0 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75      ** good enou
1bcf0 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79 62  gh?  Maybe. Mayb
1bd00 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72 64  e not. It's hard
1bd10 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65 72   to know whether
1bd20 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69   there.    ** mi
1bd30 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62 75  ght be subtle bu
1bd40 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65  gs is some imple
1bd50 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72  mentations of lr
1bd60 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20 20  and48() that.   
1bd70 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65 20   ** could cause 
1bd80 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f  problems. To avo
1bd90 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c 20  id uncertainty, 
1bda0 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73 20  SQLite uses its 
1bdb0 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64  own .    ** rand
1bdc0 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
1bdd0 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65  tor based on the
1bde0 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a   RC4 algorithm..
1bdf0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f      **.    ** To
1be00 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74   promote localit
1be10 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20 66  y of reference f
1be20 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69 6e  or repetitive in
1be30 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20 2a  serts, the.    *
1be40 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74 65  * first few atte
1be50 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e 67  mpts at choosing
1be60 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20   a random rowid 
1be70 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73 74  pick values just
1be80 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a   a little.    **
1be90 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1bea0 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64 2e   previous rowid.
1beb0 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e 20    This has been 
1bec0 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e 74  shown experiment
1bed0 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64  ally.    ** to d
1bee0 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64 20  ouble the speed 
1bef0 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65 72  of the COPY oper
1bf00 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
1bf10 20 20 69 6e 74 20 72 65 73 3d 30 2c 20 72 78 3d    int res=0, rx=
1bf20 53 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a  SQLITE_OK, cnt;.
1bf30 20 20 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63      i64 x;.    c
1bf40 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  nt = 0;.    if( 
1bf50 28 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61  (sqlite3BtreeFla
1bf60 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26  gs(pC->pCursor)&
1bf70 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54  (BTREE_INTKEY|BT
1bf80 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21  REE_ZERODATA)) !
1bf90 3d 0a 20 20 20 20 20 20 20 20 20 20 42 54 52 45  =.          BTRE
1bfa0 45 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20  E_INTKEY ){.    
1bfb0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
1bfc0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
1bfd0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1bfe0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1bff0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71  .    assert( (sq
1c000 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28  lite3BtreeFlags(
1c010 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42  pC->pCursor) & B
1c020 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20  TREE_INTKEY)!=0 
1c030 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1c040 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
1c050 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26  s(pC->pCursor) &
1c060 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29   BTREE_ZERODATA)
1c070 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
1c080 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1c090 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1c0a0 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1c0b0 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1c0c0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1c0d0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1c0e0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1c0f0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1c100 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1c110 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1c120 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1c130 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1c140 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1c150 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1c160 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1c170 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1c180 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1c190 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1c1a0 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1c1b0 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1c1c0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1c1d0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1c1e0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1c1f0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1c200 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1c210 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 65 78 74      if( pC->next
1c220 52 6f 77 69 64 56 61 6c 69 64 20 29 7b 0a 20 20  RowidValid ){.  
1c230 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6e 65        v = pC->ne
1c240 78 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 7d  xtRowid;.      }
1c250 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63  else{.        rc
1c260 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1c270 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1c280 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1c290 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1c2a0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1c2b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c2c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1c2d0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1c2e0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1c2f0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
1c300 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
1c310 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
1c320 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
1c330 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 76  &v);.          v
1c340 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a   = keyToInt(v);.
1c350 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3d            if( v=
1c360 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
1c370 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
1c380 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
1c390 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
1c3a0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  e{.            v
1c3b0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ++;.          }.
1c3c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c3d0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1c3e0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1c3f0 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70  MENT.      if( p
1c400 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
1c410 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 20    Mem *pMem;.   
1c420 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1c430 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
1c440 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f 2a  3<=p->nMem ); /*
1c450 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1c460 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20 20  emory cell */.  
1c470 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 2d        pMem = &p-
1c480 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1c490 09 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28  .REGISTER_TRACE(
1c4a0 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
1c4b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
1c4c0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1c4d0 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  (pMem);.        
1c4e0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
1c4f0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1c500 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
1c510 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
1c520 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
1c530 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
1c540 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
1c550 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1c560 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1c570 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20  QLITE_FULL;.    
1c580 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1c590 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c5a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c5b0 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
1c5c0 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  +1 ){.          
1c5d0 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
1c5e0 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
1c5f0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
1c600 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   v;.      }.#end
1c610 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 76 3c  if..      if( v<
1c620 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
1c630 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
1c640 69 64 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  idValid = 1;.   
1c650 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
1c660 69 64 20 3d 20 76 2b 31 3b 0a 20 20 20 20 20 20  id = v+1;.      
1c670 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
1c680 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1c690 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 0;.      }. 
1c6a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d     }.    if( pC-
1c6b0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1c6c0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1c6d0 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
1c6e0 2f 2a 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d  /* SQLITE_FULL m
1c6f0 75 73 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  ust have occurre
1c700 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1c710 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d  */.      v = db-
1c720 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a  >priorNewRowid;.
1c730 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1c740 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
1c750 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28   if( cnt==0 && (
1c760 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29  v&0xffffff)==v )
1c770 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
1c780 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1c790 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1c7a0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
1c7b0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
1c7c0 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1c7d0 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66 66   ) v &= 0xffffff
1c7e0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1c7f0 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63      if( v==0 ) c
1c800 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
1c810 20 78 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29   x = intToKey(v)
1c820 3b 0a 20 20 20 20 20 20 20 20 72 78 20 3d 20 73  ;.        rx = s
1c830 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1c840 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1c850 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 78  ursor, 0, (u64)x
1c860 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1c870 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20      cnt++;.     
1c880 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30   }while( cnt<100
1c890 20 26 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f   && rx==SQLITE_O
1c8a0 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K && res==0 );. 
1c8b0 20 20 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65       db->priorNe
1c8c0 77 52 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20  wRowid = v;.    
1c8d0 20 20 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45    if( rx==SQLITE
1c8e0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
1c8f0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
1c900 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20  LITE_FULL;.     
1c910 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1c920 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1c930 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43    }.    }.    pC
1c940 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1c950 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1c960 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1c970 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1c980 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1c990 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  E;.  }.  MemSetT
1c9a0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
1c9b0 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  M_Int);.  pOut->
1c9c0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
1c9d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c9e0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
1c9f0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
1ca00 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1ca10 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1ca20 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1ca30 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1ca40 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1ca50 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1ca60 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1ca70 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1ca80 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1ca90 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1caa0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
1cab0 64 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  d register.** nu
1cac0 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
1cad0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1cae0 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
1caf0 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e  ey must.** be an
1cb00 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
1cb10 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
1cb20 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
1cb30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
1cb40 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
1cb50 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
1cb60 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
1cb70 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
1cb80 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
1cb90 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1cba0 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
1cbb0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
1cbc0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
1cbd0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
1cbe0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
1cbf0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
1cc00 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
1cc10 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
1cc20 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
1cc30 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73  may point to a s
1cc40 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
1cc50 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c   the table-name,
1cc60 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55   or.** may be NU
1cc70 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74  LL. If it is not
1cc80 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
1cc90 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20  update-hook .** 
1cca0 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
1ccb0 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
1ccc0 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  oked following a
1ccd0 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
1cce0 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
1ccf0 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
1cd00 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
1cd10 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
1cd20 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
1cd30 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
1cd40 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
1cd50 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
1cd60 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
1cd70 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
1cd80 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
1cd90 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
1cda0 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
1cdb0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
1cdc0 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
1cdd0 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
1cde0 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
1cdf0 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
1ce00 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
1ce10 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1ce20 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
1ce30 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
1ce40 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
1ce50 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
1ce60 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
1ce70 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20  Insert..*/.case 
1ce80 4f 50 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d  OP_Insert: {.  M
1ce90 65 6d 20 2a 70 44 61 74 61 20 3d 20 26 70 2d 3e  em *pData = &p->
1cea0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1ceb0 20 4d 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70 2d   Mem *pKey = &p-
1cec0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1ced0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 2f  .  i64 iKey;   /
1cee0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
1cef0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
1cf00 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
1cf10 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 69 6e  inserted */.  in
1cf20 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1cf30 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1cf40 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1cf50 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1cf60 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1cf70 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1cf80 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1cf90 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1cfa0 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f  =0 || pC->pseudo
1cfb0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1cfc0 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
1cfd0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1cfe0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1cff0 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
1d000 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
1d010 44 61 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45  Data);.  REGISTE
1d020 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1d030 20 70 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20   pKey);..  iKey 
1d040 3d 20 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d  = intToKey(pKey-
1d050 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70  >u.i);.  if( pOp
1d060 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
1d070 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1d080 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
1d090 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
1d0a0 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
1d0b0 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75  tRowid = pKey->u
1d0c0 2e 69 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 65  .i;.  if( pC->ne
1d0d0 78 74 52 6f 77 69 64 56 61 6c 69 64 20 26 26 20  xtRowidValid && 
1d0e0 70 4b 65 79 2d 3e 75 2e 69 3e 3d 70 43 2d 3e 6e  pKey->u.i>=pC->n
1d0f0 65 78 74 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  extRowid ){.    
1d100 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1d110 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  id = 0;.  }.  if
1d120 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
1d130 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1d140 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
1d150 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
1d160 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1d170 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
1d180 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
1d190 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
1d1a0 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54   if( pC->pseudoT
1d1b0 61 62 6c 65 20 29 7b 0a 20 20 20 20 69 66 28 20  able ){.    if( 
1d1c0 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f  !pC->ephemPseudo
1d1d0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 73  Table ){.      s
1d1e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1d1f0 20 70 43 2d 3e 70 44 61 74 61 29 3b 0a 20 20 20   pC->pData);.   
1d200 20 7d 0a 20 20 20 20 70 43 2d 3e 69 4b 65 79 20   }.    pC->iKey 
1d210 3d 20 69 4b 65 79 3b 0a 20 20 20 20 70 43 2d 3e  = iKey;.    pC->
1d220 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
1d230 3b 0a 20 20 20 20 69 66 28 20 70 44 61 74 61 2d  ;.    if( pData-
1d240 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c  >z==pData->zMall
1d250 6f 63 20 7c 7c 20 70 43 2d 3e 65 70 68 65 6d 50  oc || pC->ephemP
1d260 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1d270 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20      pC->pData = 
1d280 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 20 20  pData->z;.      
1d290 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d 50 73  if( !pC->ephemPs
1d2a0 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20  eudoTable ){.   
1d2b0 20 20 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67       pData->flag
1d2c0 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
1d2d0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 66 6c         pData->fl
1d2e0 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d  ags |= MEM_Ephem
1d2f0 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d  ;.        pData-
1d300 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
1d310 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1d320 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61  .      pC->pData
1d330 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63   = sqlite3Malloc
1d340 28 20 70 43 2d 3e 6e 44 61 74 61 2b 32 20 29 3b  ( pC->nData+2 );
1d350 0a 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e  .      if( !pC->
1d360 70 44 61 74 61 20 29 20 67 6f 74 6f 20 6e 6f 5f  pData ) goto no_
1d370 6d 65 6d 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70  mem;.      memcp
1d380 79 28 70 43 2d 3e 70 44 61 74 61 2c 20 70 44 61  y(pC->pData, pDa
1d390 74 61 2d 3e 7a 2c 20 70 43 2d 3e 6e 44 61 74 61  ta->z, pC->nData
1d3a0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61  );.      pC->pDa
1d3b0 74 61 5b 70 43 2d 3e 6e 44 61 74 61 5d 20 3d 20  ta[pC->nData] = 
1d3c0 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61  0;.      pC->pDa
1d3d0 74 61 5b 70 43 2d 3e 6e 44 61 74 61 2b 31 5d 20  ta[pC->nData+1] 
1d3e0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  = 0;.    }.    p
1d3f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1d400 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74    }else{.    int
1d410 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 69 66 28 20   nZero;.    if( 
1d420 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1d430 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
1d440 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
1d450 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
1d460 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20  se{.      nZero 
1d470 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  = 0;.    }.    r
1d480 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d490 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
1d4a0 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e           pData->
1d4d0 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65  z, pData->n, nZe
1d4e0 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1d510 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a 20 20  _APPEND);.  }.  
1d520 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1d530 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64  lid = 0;.  pC->d
1d540 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d550 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1d560 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d570 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
1d580 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1d590 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
1d5a0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1d5b0 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
1d5c0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
1d5d0 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
1d5e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
1d5f0 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
1d600 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f  b].zName;.    co
1d610 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d  nst char *zTbl =
1d620 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
1d630 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e  int op = ((pOp->
1d640 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
1d650 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
1d660 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
1d670 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65  NSERT);.    asse
1d680 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1d690 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  );.    db->xUpda
1d6a0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
1d6b0 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a  UpdateArg, op, z
1d6c0 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
1d6d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1d6e0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
1d6f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d700 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
1d710 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
1d720 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
1d730 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
1d740 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
1d750 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
1d760 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  **.** The cursor
1d770 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
1d780 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72  inting at either
1d790 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
1d7a0 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
1d7b0 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
1d7c0 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
1d7d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1d7e0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
1d7f0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
1d800 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
1d810 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
1d820 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20   Hence it is OK 
1d830 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72  to delete.** a r
1d840 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
1d850 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  n an Next loop..
1d860 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1d870 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
1d880 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
1d890 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
1d8a0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
1d8b0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
1d8c0 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
1d8d0 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
1d8e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
1d8f0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
1d900 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
1d910 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
1d920 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
1d930 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
1d940 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
1d950 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
1d960 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e  P1 is.** pointin
1d970 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74  g to.  The updat
1d980 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e hook will be i
1d990 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78  nvoked, if it ex
1d9a0 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69  ists..** If P4 i
1d9b0 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
1d9c0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
1d9d0 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  st have been pos
1d9e0 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67  itioned.** using
1d9f0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
1da00 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
1da10 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
1da20 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
1da30 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1da40 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79 20 3d  p1;.  i64 iKey =
1da50 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   0;.  VdbeCursor
1da60 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1da70 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1da80 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1da90 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1daa0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1dab0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1dac0 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20  ursor!=0 );  /* 
1dad0 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72  Only valid for r
1dae0 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70  eal tables, no p
1daf0 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a  seudotables */..
1db00 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
1db10 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
1db20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65  invoked, set iKe
1db30 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  y to the rowid o
1db40 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62  f the.  ** row b
1db50 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20  eing deleted..  
1db60 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  */.  if( db->xUp
1db70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1db80 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1db90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1dba0 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
1dbb0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1dbc0 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74  alid );  /* last
1dbd0 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65  Rowid set by pre
1dbe0 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e  vious OP_NotFoun
1dbf0 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20  d */.    iKey = 
1dc00 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1dc10 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
1dc20 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1dc30 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1dc40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1dc50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63  e_to_error;.  rc
1dc60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
1dc70 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
1dc80 72 29 3b 0a 20 20 70 43 2d 3e 6e 65 78 74 52 6f  r);.  pC->nextRo
1dc90 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  widValid = 0;.  
1dca0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1dcb0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1dcc0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1dcd0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1dce0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1dcf0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1dd00 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1dd10 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1dd20 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
1dd30 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1dd40 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1dd50 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1dd60 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1dd70 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
1dd80 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
1dd90 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
1dda0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
1ddb0 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
1ddc0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1ddd0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
1dde0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
1ddf0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
1de00 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
1de10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1de20 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 50  de: ResetCount P
1de30 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  1 * *.**.** This
1de40 20 6f 70 63 6f 64 65 20 72 65 73 65 74 73 20 74   opcode resets t
1de50 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
1de60 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 74  change counter t
1de70 6f 20 30 2e 20 49 66 20 50 31 20 69 73 20 74 72  o 0. If P1 is tr
1de80 75 65 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ue,.** then the 
1de90 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
1dea0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
1deb0 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
1dec0 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
1ded0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
1dee0 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
1def0 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
1df00 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
1df10 29 29 0a 2a 2a 20 62 65 66 6f 72 65 20 69 74 20  )).** before it 
1df20 69 73 20 72 65 73 65 74 2e 20 54 68 69 73 20 69  is reset. This i
1df30 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
1df40 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
1df50 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
1df60 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  t: {.  if( pOp->
1df70 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
1df80 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
1df90 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
1dfa0 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  .  }.  p->nChang
1dfb0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
1dfc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
1dfd0 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  wData P1 P2 * * 
1dfe0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
1dff0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
1e000 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
1e010 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
1e020 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
1e030 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
1e040 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
1e050 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
1e060 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
1e070 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
1e080 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
1e090 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
1e0a0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
1e0b0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
1e0c0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
1e0d0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
1e0e0 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
1e0f0 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
1e100 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
1e110 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
1e120 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
1e130 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1e140 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
1e150 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
1e160 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66  mplete row key f
1e170 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1e180 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1e190 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1e1a0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68  he data.  .** Th
1e1b0 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20  e key is copied 
1e1c0 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  onto the P3 regi
1e1d0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1e1e0 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1e1f0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1e200 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1e210 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1e220 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1e230 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1e240 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1e250 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1e260 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1e270 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1e280 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50  _RowKey:.case OP
1e290 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 69 6e  _RowData: {.  in
1e2a0 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1e2b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e2c0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1e2d0 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20  sr;.  u32 n;..  
1e2e0 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
1e2f0 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p2];..  /* 
1e300 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
1e310 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
1e320 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
1e330 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
1e340 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
1e350 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1e360 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1e370 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1e380 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1e390 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
1e3a0 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b  de==OP_RowKey );
1e3b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1e3c0 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f  sIndex || pOp->o
1e3d0 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
1e3e0 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
1e3f0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1e400 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
1e410 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e420 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30  ->pseudoTable==0
1e430 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e440 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1e450 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1e460 75 72 73 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71  ursor;.  rc = sq
1e470 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1e480 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
1e490 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1e4a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e4b0 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
1e4c0 20 29 7b 0a 20 20 20 20 69 36 34 20 6e 36 34 3b   ){.    i64 n64;
1e4d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
1e4e0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1e4f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1e500 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
1e510 29 3b 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  );.    if( n64>d
1e520 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
1e530 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
1e540 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
1e550 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
1e560 6e 20 3d 20 28 69 6e 74 29 6e 36 34 3b 0a 20 20  n = (int)n64;.  
1e570 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1e580 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
1e590 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
1e5a0 69 66 28 20 28 69 6e 74 29 6e 3e 64 62 2d 3e 61  if( (int)n>db->a
1e5b0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
1e5c0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
1e5d0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
1e5e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1e5f0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
1e600 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29  Grow(pOut, n, 0)
1e610 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
1e620 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
1e630 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
1e640 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1e650 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20  EM_Blob);.  if( 
1e660 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
1e670 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e680 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30  treeKey(pCrsr, 0
1e690 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
1e6a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
1e6b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
1e6c0 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  a(pCrsr, 0, n, p
1e6d0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70  Out->z);.  }.  p
1e6e0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
1e6f0 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
1e700 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
1e710 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78  ever cast to tex
1e720 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41  t */.  UPDATE_MA
1e730 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
1e740 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e750 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
1e760 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1e770 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
1e780 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
1e790 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
1e7a0 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
1e7b0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
1e7c0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1e7d0 6e 74 20 74 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nt to..*/.case O
1e7e0 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  P_Rowid: {      
1e7f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1e800 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1e810 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1e820 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
1e830 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 0a   *pC;.  i64 v;..
1e840 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1e850 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1e860 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e870 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1e880 70 43 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  pC!=0 );.  rc = 
1e890 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1e8a0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
1e8b0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1e8c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e8d0 0a 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64  .  if( pC->rowid
1e8e0 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 76  IsValid ){.    v
1e8f0 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
1e900 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
1e910 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
1e920 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e  .    v = keyToIn
1e930 74 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 20 20 7d  t(pC->iKey);.  }
1e940 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 6e 75 6c  else if( pC->nul
1e950 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 4c  lRow ){.    /* L
1e960 65 61 76 65 20 74 68 65 20 72 6f 77 69 64 20 73  eave the rowid s
1e970 65 74 20 74 6f 20 61 20 4e 55 4c 4c 20 2a 2f 0a  et to a NULL */.
1e980 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
1e990 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1e9a0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1e9b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
1e9c0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1e9d0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1e9e0 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b  v = keyToInt(v);
1e9f0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
1ea00 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = v;.  MemSetTy
1ea10 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
1ea20 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
1ea30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
1ea40 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
1ea50 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
1ea60 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
1ea70 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
1ea80 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
1ea90 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
1eaa0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
1eab0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
1eac0 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
1ead0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
1eae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
1eaf0 6c 52 6f 77 3a 20 7b 0a 20 20 69 6e 74 20 69 20  lRow: {.  int i 
1eb00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
1eb10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
1eb20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1eb30 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1eb40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1eb50 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1eb60 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
1eb70 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
1eb80 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1eb90 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
1eba0 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
1ebb0 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
1ebc0 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
1ebd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1ebe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
1ebf0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1ec00 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
1ec10 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
1ec20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
1ec30 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
1ec40 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
1ec50 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
1ec60 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
1ec70 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
1ec80 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
1ec90 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
1eca0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
1ecb0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1ecc0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
1ecd0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
1ece0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1ecf0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
1ed00 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1ed10 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1ed20 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
1ed30 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
1ed40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1ed50 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1ed60 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
1ed70 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1ed80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1ed90 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
1eda0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1edb0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1edc0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1edd0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ede0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1edf0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1ee00 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1ee10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ee20 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
1ee30 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1ee40 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
1ee50 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1ee60 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
1ee70 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1ee80 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1ee90 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1eea0 20 20 69 66 28 20 72 65 73 20 26 26 20 70 4f 70    if( res && pOp
1eeb0 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 70 63  ->p2>0 ){.    pc
1eec0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1eed0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1eee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1eef0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1ef00 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
1ef10 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
1ef20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
1ef30 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
1ef40 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
1ef50 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
1ef60 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
1ef70 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
1ef80 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
1ef90 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
1efa0 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
1efb0 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
1efc0 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
1efd0 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
1efe0 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
1eff0 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
1f000 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
1f010 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
1f020 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
1f030 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
1f040 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
1f050 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
1f060 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
1f070 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
1f080 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
1f090 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
1f0a0 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
1f0b0 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
1f0c0 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
1f0d0 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
1f0e0 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
1f0f0 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
1f100 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
1f110 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
1f120 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1f130 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
1f140 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
1f150 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
1f160 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
1f170 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
1f180 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31  TMTSTATUS_SORT-1
1f190 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
1f1a0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
1f1b0 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
1f1c0 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
1f1d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
1f1e0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
1f1f0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
1f200 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
1f210 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
1f220 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
1f230 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
1f240 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1f250 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
1f260 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
1f270 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
1f280 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
1f290 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1f2a0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
1f2b0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
1f2c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1f2d0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
1f2e0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
1f2f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1f300 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
1f310 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
1f320 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
1f330 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1f340 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
1f350 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1f360 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1f370 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
1f380 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1f390 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1f3a0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1f3b0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f3c0 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
1f3d0 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
1f3e0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1f3f0 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
1f400 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
1f410 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
1f420 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
1f430 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1f440 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1f450 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1f460 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
1f470 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1f480 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
1f490 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70  res = 1;.  }.  p
1f4a0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
1f4b0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
1f4c0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
1f4d0 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
1f4e0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1f4f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f500 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f510 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
1f520 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1f530 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
1f540 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1f550 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
1f560 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
1f570 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
1f580 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
1f590 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
1f5a0 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
1f5b0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
1f5c0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
1f5d0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
1f5e0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
1f5f0 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
1f600 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
1f610 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
1f620 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
1f630 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
1f640 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
1f650 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
1f660 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1f670 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
1f680 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  v.*/./* Opcode: 
1f690 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a  Prev P1 P2 * * *
1f6a0 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
1f6b0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1f6c0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1f6d0 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
1f6e0 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
1f6f0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
1f700 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
1f710 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
1f720 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
1f730 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1f740 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1f750 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
1f760 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
1f770 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
1f780 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
1f790 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1f7a0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
1f7b0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
1f7c0 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
1f7d0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1f7e0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1f7f0 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
1f800 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
1f810 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20  OP_Next: {      
1f820 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
1f830 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1f840 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1f850 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
1f860 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
1f870 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70  UPT;.  assert( p
1f880 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1f890 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1f8a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f8b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1f8c0 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pC==0 ){.    
1f8d0 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74  break;  /* See t
1f8e0 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20  icket #2273 */. 
1f8f0 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d   }.  pCrsr = pC-
1f900 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
1f910 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72  rt( pCrsr );.  r
1f920 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  es = 1;.  assert
1f930 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1f940 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
1f950 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  = pOp->opcode==O
1f960 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74 65 33  P_Next ? sqlite3
1f970 42 74 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c  BtreeNext(pCrsr,
1f980 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20 20 20   &res) :.       
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
1f9b0 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 72 73  reePrevious(pCrs
1f9c0 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
1f9d0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
1f9e0 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  s;.  pC->cacheSt
1f9f0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1fa00 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
1fa10 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1fa20 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66  ->p2 - 1;.    if
1fa30 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61  ( pOp->p5 ) p->a
1fa40 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d  Counter[pOp->p5-
1fa50 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  1]++;.#ifdef SQL
1fa60 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
1fa70 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1fa80 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  t++;.#endif.  }.
1fa90 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1faa0 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  id = 0;.  break;
1fab0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1fac0 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
1fad0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69  3 * *.**.** Regi
1fae0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 20  ster P2 holds a 
1faf0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
1fb00 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
1fb10 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
1fb20 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
1fb30 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
1fb40 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
1fb50 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
1fb60 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
1fb70 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
1fb80 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
1fb90 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
1fba0 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
1fbb0 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
1fbc0 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
1fbd0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
1fbe0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1fbf0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
1fc00 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
1fc10 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
1fc20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
1fc30 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
1fc40 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73  P_Insert..*/.cas
1fc50 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
1fc60 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
1fc70 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1fc80 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
1fc90 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1fca0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73  or *pCrsr;.  ass
1fcb0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1fcc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1fcd0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1fce0 69 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  i]!=0 );.  asser
1fcf0 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
1fd00 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
1fd10 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43 20  f( (pCrsr = (pC 
1fd20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e  = p->apCsr[i])->
1fd30 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20  pCursor)!=0 ){. 
1fd40 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1fd50 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
1fd60 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
1fd70 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20  (pIn2);.    if( 
1fd80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1fd90 0a 20 20 20 20 20 20 69 6e 74 20 6e 4b 65 79 20  .      int nKey 
1fda0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
1fdb0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
1fdc0 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
1fdd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1fde0 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72  treeInsert(pCrsr
1fdf0 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
1fe00 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 29  , 0, 0, pOp->p3)
1fe10 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1fe20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1fe30 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70  to==0 );.      p
1fe40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1fe50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1fe60 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
1fe70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1fe80 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
1fe90 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
1fea0 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
1feb0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
1fec0 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
1fed0 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
1fee0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
1fef0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
1ff00 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
1ff10 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
1ff20 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
1ff30 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
1ff40 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
1ff50 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1ff60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ff70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1ff80 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
1ff90 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
1ffa0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
1ffb0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
1ffc0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  >p3<=p->nMem+1 )
1ffd0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
1ffe0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1fff0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
20000 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
20010 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28    if( (pCrsr = (
20020 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
20030 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  )->pCursor)!=0 )
20040 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
20050 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72     UnpackedRecor
20060 64 20 72 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  d r;.    r.pKeyI
20070 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
20080 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
20090 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
200a0 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30  .    r.flags = 0
200b0 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ;.    r.aMem = &
200c0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
200d0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
200e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
200f0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
20100 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
20110 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20120 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
20130 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
20140 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
20150 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Crsr);.    }.   
20160 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
20170 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
20180 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
20190 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
201a0 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ALE;.  }.  break
201b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
201c0 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
201d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
201e0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
201f0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
20200 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
20210 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
20220 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
20230 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
20240 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
20250 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
20260 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
20270 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
20280 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
20290 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
202a0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
202b0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
202c0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
202d0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
202e0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
202f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
20300 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
20310 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
20320 3e 70 31 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  >p1;.  BtCursor 
20330 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75  *pCrsr;.  VdbeCu
20340 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
20350 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
20360 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
20370 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
20380 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
20390 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d  pCrsr = (pC = p-
203a0 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
203b0 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  sor)!=0 ){.    i
203c0 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 20 20 61  64 rowid;..    a
203d0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
203e0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
203f0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20400 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
20410 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
20420 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  ow ){.      rc =
20430 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
20440 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72 6f 77  owid(pCrsr, &row
20450 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  id);.      if( r
20460 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20470 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
20480 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20490 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 4d  .      }.      M
204a0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
204b0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
204c0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
204d0 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  rowid;.    }.  }
204e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
204f0 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
20500 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
20510 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
20520 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
20530 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
20540 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
20550 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
20560 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
20570 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
20580 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
20590 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
205a0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
205b0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
205c0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
205d0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
205e0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
205f0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
20600 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
20610 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
20620 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
20630 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
20640 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
20650 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
20660 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
20670 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
20680 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
20690 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
206a0 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
206b0 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20  silon .** prior 
206c0 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
206d0 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68  n.  This make th
206e0 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69  e opcode work li
206f0 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74 0a  ke IdxGT except.
20700 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20 6b  ** that if the k
20710 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ey from register
20720 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78 20   P3 is a prefix 
20730 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68  of the key in th
20740 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
20750 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
20760 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c   whereas it woul
20770 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20 49  d be true with I
20780 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  dxGT..*/./* Opco
20790 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
207a0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  P3 * P5.**.** Th
207b0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
207c0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
207d0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
207e0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
207f0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
20800 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
20810 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
20820 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
20830 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
20840 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
20850 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
20860 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
20870 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
20880 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
20890 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
208a0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
208b0 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
208c0 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
208d0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
208e0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
208f0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
20900 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
20910 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
20920 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
20930 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
20940 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68   prior .** to th
20950 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
20960 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70  his makes the op
20970 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
20980 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dxLE..*/.case OP
20990 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
209a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
209b0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
209c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
209d0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
209e0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
209f0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
20a00 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
20a10 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
20a20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
20a30 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66  sr[i]!=0 );.  if
20a40 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  ( (pC = p->apCsr
20a50 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30  [i])->pCursor!=0
20a60 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b   ){.    int res;
20a70 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63  .    UnpackedRec
20a80 6f 72 64 20 72 3b 0a 20 20 20 20 61 73 73 65 72  ord r;.    asser
20a90 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
20aa0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
20ab0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
20ac0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
20ad0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
20ae0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
20af0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70  INT32 );.    r.p
20b00 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
20b10 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
20b20 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
20b30 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70  >p4.i;.    if( p
20b40 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
20b50 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
20b60 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
20b70 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57  ACKED_IGNORE_ROW
20b80 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ID;.    }else{. 
20b90 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
20ba0 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
20bb0 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20  OWID;.    }.    
20bc0 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
20bd0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20be0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
20bf0 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43  IdxKeyCompare(pC
20c00 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  , &r, &res);.   
20c10 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
20c20 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  ==OP_IdxLT ){.  
20c30 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
20c40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20c50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
20c60 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29  code==OP_IdxGE )
20c70 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20  ;.      res++;. 
20c80 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73     }.    if( res
20c90 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  >0 ){.      pc =
20ca0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20   pOp->p2 - 1 ;. 
20cb0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
20cc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20cd0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
20ce0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
20cf0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
20d00 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
20d10 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
20d20 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
20d30 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
20d40 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
20d50 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
20d60 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
20d70 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
20d80 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
20d90 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
20da0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
20db0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
20dc0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
20dd0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
20de0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
20df0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
20e00 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
20e10 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
20e20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
20e30 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
20e40 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
20e50 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
20e60 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
20e70 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
20e80 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
20e90 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
20ea0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
20eb0 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
20ec0 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
20ed0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
20ee0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
20ef0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
20f00 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
20f10 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
20f20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
20f30 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
20f40 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
20f50 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
20f60 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
20f70 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
20f80 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
20f90 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
20fa0 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
20fb0 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
20fc0 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
20fd0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
20fe0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
20ff0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
21000 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
21010 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
21020 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
21030 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
21040 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21050 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
21060 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
21070 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
21080 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
21090 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
210a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
210b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
210c0 4c 45 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  LE.  Vdbe *pVdbe
210d0 3b 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  ;.  iCnt = 0;.  
210e0 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
210f0 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
21100 65 3d 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b  e=pVdbe->pNext){
21110 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e  .    if( pVdbe->
21120 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
21130 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e  C_RUN && pVdbe->
21140 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
21150 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29  & pVdbe->pc>=0 )
21160 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a  {.      iCnt++;.
21170 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a      }.  }.#else.
21180 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74    iCnt = db->act
21190 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64  iveVdbeCnt;.#end
211a0 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  if.  if( iCnt>1 
211b0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
211c0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
211d0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
211e0 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
211f0 65 7b 0a 20 20 20 20 69 6e 74 20 69 44 62 20 3d  e{.    int iDb =
21200 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
21210 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
21220 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
21230 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
21240 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20  <iDb))!=0 );.   
21250 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21260 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
21270 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
21280 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
21290 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
212a0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
212b0 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
212c0 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
212d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
212e0 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
212f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21300 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
21310 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
21320 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d  otPageMoved(&db-
21330 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65  >aDb[iDb], iMove
21340 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
21350 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
21360 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21370 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
21380 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
21390 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
213a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
213b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
213c0 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
213d0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
213e0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
213f0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
21400 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
21410 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
21420 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
21430 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
21440 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
21450 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
21460 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
21470 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
21480 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
21490 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
214a0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
214b0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
214c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
214d0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
214e0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
214f0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
21500 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
21510 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
21520 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
21530 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
21540 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
21550 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
21560 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
21570 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
21580 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
21590 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
215a0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
215b0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
215c0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
215d0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
215e0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
215f0 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
21600 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
21610 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
21620 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
21630 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
21640 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
21650 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
21660 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
21670 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
21680 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
21690 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
216a0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
216b0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 20 3d 20    int nChange = 
216c0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  0;.  assert( (p-
216d0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
216e0 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
216f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
21700 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
21710 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
21720 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
21730 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
21740 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
21750 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
21760 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
21770 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
21780 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
21790 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61 4d 65   ){.      p->aMe
217a0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
217b0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
217c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
217d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
217e0 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
217f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
21800 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
21810 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
21820 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
21830 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
21840 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
21850 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
21860 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
21870 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
21880 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
21890 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
218a0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
218b0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
218c0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
218d0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
218e0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
218f0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
21900 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
21910 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
21920 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
21930 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
21940 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
21950 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
21960 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
21970 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
21980 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
21990 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
219a0 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
219b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
219c0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
219d0 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
219e0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
219f0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
21a00 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
21a10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
21a20 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
21a30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
21a40 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
21a50 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
21a60 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
21a70 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
21a80 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
21a90 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
21aa0 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
21ab0 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
21ac0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
21ad0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
21ae0 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
21af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
21b00 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
21b10 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
21b20 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
21b30 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
21b40 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
21b50 20 3d 20 30 3b 0a 20 20 69 6e 74 20 66 6c 61 67   = 0;.  int flag
21b60 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  s;.  Db *pDb;.  
21b70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21b80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
21b90 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
21ba0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
21bb0 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
21bc0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
21bd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
21be0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
21bf0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
21c00 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21c10 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
21c20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
21c30 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
21c40 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
21c50 45 5f 4c 45 41 46 44 41 54 41 7c 42 54 52 45 45  E_LEAFDATA|BTREE
21c60 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
21c70 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
21c80 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b 0a 20 20  REE_ZERODATA;.  
21c90 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
21ca0 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
21cb0 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
21cc0 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74  , flags);.  pOut
21cd0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
21ce0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
21cf0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
21d00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21d10 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d  code: ParseSchem
21d20 61 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  a P1 P2 * P4 *.*
21d30 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
21d40 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
21d50 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
21d60 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
21d70 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
21d80 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
21d90 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20  ERE clause P4.  
21da0 50 32 20 69 73 20 74 68 65 20 22 66 6f 72 63 65  P2 is the "force
21db0 22 20 66 6c 61 67 2e 20 20 20 41 6c 77 61 79 73  " flag.   Always
21dc0 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72 73 69   do.** the parsi
21dd0 6e 67 20 69 66 20 50 32 20 69 73 20 74 72 75 65  ng if P2 is true
21de0 2e 20 20 49 66 20 50 32 20 69 73 20 66 61 6c 73  .  If P2 is fals
21df0 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
21e00 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e 6f 2d  tine is a.** no-
21e10 6f 70 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  op if the schema
21e20 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
21e30 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20 6f 74  y loaded.  In ot
21e40 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 50 32  her words, if P2
21e50 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20 74 68  .** is false, th
21e60 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
21e70 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20 70 61  table is only pa
21e80 72 73 65 64 20 69 66 20 74 68 65 20 72 65 73 74  rsed if the rest
21e90 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
21ea0 61 20 69 73 20 61 6c 72 65 61 64 79 20 6c 6f 61  a is already loa
21eb0 64 65 64 20 69 6e 74 6f 20 74 68 65 20 73 79 6d  ded into the sym
21ec0 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  bol table..**.**
21ed0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
21ee0 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
21ef0 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
21f00 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
21f10 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
21f20 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
21f30 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
21f40 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
21f50 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
21f60 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
21f70 7b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  {.  char *zSql;.
21f80 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
21f90 3e 70 31 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  >p1;.  const cha
21fa0 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 49 6e  r *zMaster;.  In
21fb0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
21fc0 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ..  assert( iDb>
21fd0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
21fe0 62 20 29 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d  b );.  if( !pOp-
21ff0 3e 70 32 20 26 26 20 21 44 62 48 61 73 50 72 6f  >p2 && !DbHasPro
22000 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
22010 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
22020 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
22030 7d 0a 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43  }.  zMaster = SC
22040 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
22050 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d  .  initData.db =
22060 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e   db;.  initData.
22070 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
22080 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
22090 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
220a0 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ;.  zSql = sqlit
220b0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
220c0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
220d0 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
220e0 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
220f0 45 20 25 73 22 2c 0a 20 20 20 20 20 64 62 2d 3e  E %s",.     db->
22100 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  aDb[iDb].zName, 
22110 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34  zMaster, pOp->p4
22120 2e 7a 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d  .z);.  if( zSql=
22130 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
22140 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65  ;.  (void)sqlite
22150 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a  3SafetyOff(db);.
22160 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e    assert( db->in
22170 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20  it.busy==0 );.  
22180 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
22190 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 72 63  1;.  initData.rc
221a0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
221b0 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
221c0 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 72  locFailed );.  r
221d0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
221e0 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
221f0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
22200 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
22210 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22220 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
22230 74 61 2e 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  ta.rc;.  sqlite3
22240 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
22250 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  ;.  db->init.bus
22260 79 20 3d 20 30 3b 0a 20 20 28 76 6f 69 64 29 73  y = 0;.  (void)s
22270 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
22280 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
22290 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
222a0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
222b0 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
222c0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
222d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
222e0 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  E) && !defined(S
222f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45  QLITE_OMIT_PARSE
22300 52 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  R)./* Opcode: Lo
22310 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
22320 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
22330 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
22340 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
22350 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
22360 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
22370 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
22380 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
22390 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
223a0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
223b0 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
223c0 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
223d0 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
223e0 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
223f0 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
22400 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
22410 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
22420 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
22430 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
22440 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
22450 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
22460 61 64 28 64 62 2c 20 69 44 62 29 3b 0a 20 20 62  ad(db, iDb);.  b
22470 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
22480 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
22490 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
224a0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
224b0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52  LITE_OMIT_PARSER
224c0 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  )  */../* Opcode
224d0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
224e0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
224f0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
22500 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
22510 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
22520 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
22530 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
22540 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
22550 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
22560 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
22570 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
22580 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
22590 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
225a0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
225b0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
225c0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
225d0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
225e0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
225f0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
22600 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
22610 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
22620 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
22630 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22640 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
22650 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
22660 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
22670 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
22680 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
22690 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
226a0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
226b0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
226c0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
226d0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
226e0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
226f0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
22700 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
22710 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
22720 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
22730 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
22740 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
22750 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
22760 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
22770 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
22780 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
22790 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
227a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
227b0 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
227c0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
227d0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
227e0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
227f0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
22800 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
22810 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
22820 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
22830 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
22840 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
22850 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
22860 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
22870 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
22880 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
22890 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
228a0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
228b0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
228c0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
228d0 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
228e0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
228f0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
22900 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
22910 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
22920 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
22930 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
22940 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
22950 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
22960 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
22970 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
22980 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
22990 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
229a0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
229b0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
229c0 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
229d0 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
229e0 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
229f0 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
22a00 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
22a10 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
22a20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
22a30 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
22a40 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
22a50 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
22a60 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
22a70 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
22a80 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
22a90 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
22aa0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
22ab0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
22ac0 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
22ad0 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
22ae0 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
22af0 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
22b00 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
22b10 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
22b20 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
22b30 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
22b40 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
22b50 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
22b60 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74  re integer.** st
22b70 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c  ored in reg(P1),
22b80 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28   reg(P1+1), reg(
22b90 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65  P1+2), ....  The
22ba0 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73  re are P2 tables
22bb0 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a  .** total..**.**
22bc0 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
22bd0 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
22be0 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
22bf0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
22c00 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
22c10 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
22c20 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
22c30 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
22c40 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
22c50 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
22c60 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
22c70 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
22c80 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
22c90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22ca0 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
22cb0 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
22cc0 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
22cd0 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
22ce0 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
22cf0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
22d00 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
22d10 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a  ecked */.  int j
22d20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
22d30 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
22d40 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
22d50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
22d60 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
22d70 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
22d80 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
22d90 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
22da0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
22db0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
22dc0 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
22dd0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
22de0 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d   */.  .  nRoot =
22df0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
22e00 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
22e10 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
22e20 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
22e30 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
22e40 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
22e50 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
22e60 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
22e70 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
22e80 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
22e90 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 70 2d 3e  ;.  pnErr = &p->
22ea0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22eb0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
22ec0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
22ed0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
22ee0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
22ef0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
22f00 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
22f10 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
22f20 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
22f30 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
22f40 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
22f50 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
22f60 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
22f70 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
22f80 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
22f90 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
22fa0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
22fb0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
22fc0 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  (1<<pOp->p5))!=0
22fd0 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
22fe0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
22ff0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
23000 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
23010 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
23040 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
23050 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
23060 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
23070 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
23080 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
23090 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
230a0 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
230b0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
230c0 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
230d0 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
230e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
230f0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
23100 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
23110 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
23120 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
23130 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
23140 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
23150 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
23160 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
23170 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
23180 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
23190 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
231a0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
231b0 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
231c0 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
231d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
231e0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
231f0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
23200 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
23210 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
23220 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
23230 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
23240 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
23250 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
23260 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
23270 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
23280 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
23290 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  in2 */.  Mem *pI
232a0 64 78 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 6c 3b  dx;.  Mem *pVal;
232b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
232c0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
232d0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
232e0 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  dx = &p->aMem[pO
232f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23300 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
23310 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
23320 29 3b 0a 20 20 70 56 61 6c 20 3d 20 26 70 2d 3e  );.  pVal = &p->
23330 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
23340 20 61 73 73 65 72 74 28 20 28 70 56 61 6c 2d 3e   assert( (pVal->
23350 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
23360 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
23370 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx->flags & MEM_
23380 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
23390 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
233a0 53 65 74 52 6f 77 53 65 74 28 70 49 64 78 29 3b  SetRowSet(pIdx);
233b0 0a 20 20 20 20 69 66 28 20 28 70 49 64 78 2d 3e  .    if( (pIdx->
233c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
233d0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
233e0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
233f0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
23400 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIdx->u.pRowSet,
23410 20 70 56 61 6c 2d 3e 75 2e 69 29 3b 0a 20 20 62   pVal->u.i);.  b
23420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23430 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
23440 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
23450 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
23460 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
23470 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
23480 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
23490 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
234a0 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
234b0 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
234c0 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
234d0 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
234e0 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
234f0 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
23500 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
23510 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
23520 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
23530 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 4d 65 6d 20  , out3 */.  Mem 
23540 2a 70 49 64 78 3b 0a 20 20 69 36 34 20 76 61 6c  *pIdx;.  i64 val
23550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23560 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
23570 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 43  <=p->nMem );.  C
23580 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
23590 50 54 3b 0a 20 20 70 49 64 78 20 3d 20 26 70 2d  PT;.  pIdx = &p-
235a0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
235b0 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
235c0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
235d0 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26  ( (pIdx->flags &
235e0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
235f0 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
23600 77 53 65 74 4e 65 78 74 28 70 49 64 78 2d 3e 75  wSetNext(pIdx->u
23610 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
23620 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
23630 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
23640 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
23650 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
23660 65 74 4e 75 6c 6c 28 70 49 64 78 29 3b 0a 20 20  etNull(pIdx);.  
23670 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23680 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
23690 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
236a0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
236b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 61 73 73  index */.    ass
236c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
236d0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
236e0 65 6d 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  em );.    sqlite
236f0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
23700 28 70 4f 75 74 2c 20 76 61 6c 29 3b 0a 20 20 7d  (pOut, val);.  }
23710 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
23720 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23730 54 5f 54 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63  T_TRIGGER./* Opc
23740 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 75 73 68  ode: ContextPush
23750 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61   * * * .**.** Sa
23760 76 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 56  ve the current V
23770 64 62 65 20 63 6f 6e 74 65 78 74 20 73 75 63 68  dbe context such
23780 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
23790 72 65 73 74 6f 72 65 64 20 62 79 20 61 20 43 6f  restored by a Co
237a0 6e 74 65 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f  ntextPop.** opco
237b0 64 65 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20  de. The context 
237c0 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20  stores the last 
237d0 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74  insert row id, t
237e0 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  he last statemen
237f0 74 20 63 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e  t change.** coun
23800 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72 65  t, and the curre
23810 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61  nt statement cha
23820 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61  nge count..*/.ca
23830 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73  se OP_ContextPus
23840 68 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  h: {.  int i = p
23850 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
23860 70 2b 2b 3b 0a 20 20 43 6f 6e 74 65 78 74 20 2a  p++;.  Context *
23870 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 61 73 73  pContext;..  ass
23880 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f  ert( i>=0 );.  /
23890 2a 20 46 49 58 20 4d 45 3a 20 54 68 69 73 20 73  * FIX ME: This s
238a0 68 6f 75 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74  hould be allocat
238b0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
238c0 65 20 76 64 62 65 20 61 74 20 63 6f 6d 70 69 6c  e vdbe at compil
238d0 65 2d 74 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20  e-time */.  if( 
238e0 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  i>=p->contextSta
238f0 63 6b 44 65 70 74 68 20 29 7b 0a 20 20 20 20 70  ckDepth ){.    p
23900 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65  ->contextStackDe
23910 70 74 68 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70  pth = i+1;.    p
23920 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d  ->contextStack =
23930 20 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f   sqlite3DbReallo
23940 63 4f 72 46 72 65 65 28 64 62 2c 20 70 2d 3e 63  cOrFree(db, p->c
23950 6f 6e 74 65 78 74 53 74 61 63 6b 2c 0a 20 20 20  ontextStack,.   
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 43 6f         sizeof(Co
23990 6e 74 65 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20  ntext)*(i+1));. 
239a0 20 20 20 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78     if( p->contex
239b0 74 53 74 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f  tStack==0 ) goto
239c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
239d0 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f  Context = &p->co
239e0 6e 74 65 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20  ntextStack[i];. 
239f0 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52   pContext->lastR
23a00 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
23a10 6f 77 69 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74  owid;.  pContext
23a20 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
23a30 43 68 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b  Change;.  break;
23a40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
23a50 6f 6e 74 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20  ontextPop * * * 
23a60 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74  .**.** Restore t
23a70 68 65 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20  he Vdbe context 
23a80 74 6f 20 74 68 65 20 73 74 61 74 65 20 69 74 20  to the state it 
23a90 77 61 73 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74  was in when cont
23aa0 65 78 74 50 75 73 68 20 77 61 73 20 6c 61 73 74  extPush was last
23ab0 0a 2a 2a 20 65 78 65 63 75 74 65 64 2e 20 54 68  .** executed. Th
23ac0 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73  e context stores
23ad0 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
23ae0 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73   row id, the las
23af0 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63  t statement.** c
23b00 68 61 6e 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64  hange count, and
23b10 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
23b20 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f  tement change co
23b30 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  unt..*/.case OP_
23b40 43 6f 6e 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20  ContextPop: {.  
23b50 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78  Context *pContex
23b60 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53  t = &p->contextS
23b70 74 61 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78  tack[--p->contex
23b80 74 53 74 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73  tStackTop];.  as
23b90 73 65 72 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74  sert( p->context
23ba0 53 74 61 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20  StackTop>=0 );. 
23bb0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
23bc0 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52   pContext->lastR
23bd0 6f 77 69 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  owid;.  p->nChan
23be0 67 65 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  ge = pContext->n
23bf0 43 68 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b  Change;.  break;
23c00 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
23c10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23c20 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
23c30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23c40 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
23c50 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
23c60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23c70 2a 2a 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ** Set the value
23c80 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
23c90 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
23ca0 66 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  f its current va
23cb0 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  lue.** and the v
23cc0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
23cd0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
23ce0 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
23cf0 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
23d00 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
23d10 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
23d20 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
23d30 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
23d40 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
23d50 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69  1, in2 */.  sqli
23d60 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
23d70 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 73 71  rify(pIn1);.  sq
23d80 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
23d90 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
23da0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
23db0 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
23dc0 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
23dd0 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
23de0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
23df0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
23e00 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
23e10 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
23e20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
23e30 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
23e40 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
23e50 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
23e60 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
23e70 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
23e80 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
23e90 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
23ea0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
23eb0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
23ec0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
23ed0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
23ee0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
23ef0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
23f00 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
23f10 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
23f20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
23f30 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
23f40 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
23f50 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
23f60 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23f70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23f80 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
23f90 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
23fa0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
23fb0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
23fc0 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
23fd0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
23fe0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
23ff0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
24000 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
24010 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
24020 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
24030 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
24040 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
24050 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
24060 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
24070 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
24080 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
24090 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
240a0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
240b0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
240c0 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
240d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
240e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
240f0 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
24100 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24110 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
24120 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
24130 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20  exactly 0, jump 
24140 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
24150 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
24160 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
24170 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
24180 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
24190 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
241a0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
241b0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
241c0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
241d0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
241e0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
241f0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
24200 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
24210 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
24220 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
24230 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
24240 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
24250 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24260 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
24270 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
24280 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
24290 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
242a0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
242b0 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
242c0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
242d0 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
242e0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
242f0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
24300 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
24310 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
24320 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
24330 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
24340 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
24350 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
24360 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
24370 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
24380 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
24390 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
243a0 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70  p: {.  int n = p
243b0 4f 70 2d 3e 70 35 3b 0a 20 20 69 6e 74 20 69 3b  Op->p5;.  int i;
243c0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 2c 20 2a 70  .  Mem *pMem, *p
243d0 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Rec;.  sqlite3_c
243e0 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
243f0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
24400 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Val;..  assert( 
24410 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
24420 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
24430 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
24440 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
24450 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
24460 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
24470 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
24480 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
24490 70 52 65 63 3b 0a 20 20 20 20 73 74 6f 72 65 54  pRec;.    storeT
244a0 79 70 65 49 6e 66 6f 28 70 52 65 63 2c 20 65 6e  ypeInfo(pRec, en
244b0 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 63  coding);.  }.  c
244c0 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
244d0 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
244e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
244f0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
24500 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  m );.  ctx.pMem 
24510 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  = pMem = &p->aMe
24520 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d  m[pOp->p3];.  pM
24530 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73  em->n++;.  ctx.s
24540 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
24550 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30  l;.  ctx.s.z = 0
24560 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
24570 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78  c = 0;.  ctx.s.x
24580 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
24590 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
245a0 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
245b0 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20  tx.pColl = 0;.  
245c0 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
245d0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
245e0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
245f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
24600 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
24610 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
24620 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
24630 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
24640 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
24650 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
24660 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
24670 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
24680 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
24690 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
246a0 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 63   apVal);.  if( c
246b0 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
246c0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
246d0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
246e0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
246f0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
24700 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
24710 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
24720 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
24730 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
24740 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24750 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
24760 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
24770 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
24780 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
24790 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
247a0 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
247b0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
247c0 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
247d0 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
247e0 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
247f0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
24800 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
24810 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
24820 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
24830 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
24840 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
24850 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
24860 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
24870 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
24880 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
24890 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
248a0 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
248b0 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
248c0 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
248d0 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
248e0 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
248f0 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
24900 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
24910 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
24920 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
24930 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
24940 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
24950 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
24960 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
24970 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
24980 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
24990 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
249a0 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
249b0 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d   );.  pMem = &p-
249c0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
249d0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
249e0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
249f0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
24a00 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
24a10 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
24a20 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
24a30 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
24a40 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
24a50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
24a60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
24a70 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
24a80 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
24a90 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
24aa0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
24ab0 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
24ac0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
24ad0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
24ae0 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
24af0 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
24b00 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
24b10 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
24b20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
24b30 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24b40 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
24b50 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24b60 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
24b70 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
24b80 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
24b90 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
24ba0 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
24bb0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
24bc0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
24bd0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
24be0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
24bf0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
24c00 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
24c10 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
24c20 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
24c30 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
24c40 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
24c50 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
24c60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
24c70 73 75 73 65 3b 20 0a 20 20 72 63 20 3d 20 73 71  suse; .  rc = sq
24c80 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
24c90 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
24ca0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
24cb0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
24cc0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
24cd0 69 73 75 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  isuse;.  break;.
24ce0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
24cf0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24d00 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
24d10 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
24d20 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
24d30 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
24d40 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
24d50 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
24d60 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
24d70 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
24d80 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
24d90 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
24da0 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
24db0 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
24dc0 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
24dd0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
24de0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
24df0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
24e00 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
24e10 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
24e20 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
24e30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24e40 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
24e50 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
24e60 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
24e70 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
24e80 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
24e90 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
24ea0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
24eb0 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
24ec0 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
24ed0 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
24ee0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
24ef0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
24f00 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72  ITE_OK;.  }.  br
24f10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
24f20 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
24f30 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
24f40 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
24f50 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
24f60 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  o become expired
24f70 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61  . An expired sta
24f80 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20  tement.** fails 
24f90 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f  with an error co
24fa0 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48  de of SQLITE_SCH
24fb0 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65  EMA if it is eve
24fc0 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28  r executed .** (
24fd0 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70  via sqlite3_step
24fe0 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  ())..** .** If P
24ff0 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
25000 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
25010 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
25020 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
25030 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
25040 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
25050 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
25060 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a  t is affected. .
25070 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
25080 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
25090 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
250a0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
250b0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
250c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
250d0 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
250e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
250f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25100 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
25110 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
25120 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
25130 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
25140 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
25150 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
25160 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
25170 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
25180 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
25190 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
251a0 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  abled. .**.** If
251b0 20 50 31 20 69 73 20 20 74 68 65 20 69 6e 64 65   P1 is  the inde
251c0 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
251d0 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
251e0 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
251f0 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
25200 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
25210 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
25220 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
25230 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
25240 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
25250 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
25260 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
25270 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
25280 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
25290 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
252a0 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
252b0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
252c0 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
252d0 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
252e0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
252f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
25300 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
25310 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
25320 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
25330 63 6b 3a 20 7b 0a 20 20 69 6e 74 20 70 31 20 3d  ck: {.  int p1 =
25340 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 75 38 20   pOp->p1; .  u8 
25350 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
25360 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  8)pOp->p3;.  ass
25370 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
25380 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
25390 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
253a0 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21 3d  ask & (1<<p1))!=
253b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
253c0 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
253d0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
253e0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
253f0 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
25400 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
25410 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
25420 65 4c 6f 63 6b 29 3b 0a 20 20 69 66 28 20 72 63  eLock);.  if( rc
25430 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
25440 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
25450 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
25460 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
25470 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
25480 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73  sg, db, "databas
25490 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
254a0 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a  d: %s", z);.  }.
254b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
254c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
254d0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
254e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
254f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25500 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
25510 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
25520 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
25530 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
25540 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
25550 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
25560 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
25570 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
25580 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
25590 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
255a0 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
255b0 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
255c0 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
255d0 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
255e0 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
255f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
25600 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
25610 20 49 66 20 69 74 20 69 73 2c 20 73 65 74 20 74   If it is, set t
25620 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  he.** error code
25630 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
25640 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
25650 65 67 69 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  egin: {.  sqlite
25660 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
25670 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
25680 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
25690 62 42 65 67 69 6e 28 64 62 2c 20 70 56 74 61 62  bBegin(db, pVtab
256a0 29 3b 0a 20 20 69 66 28 20 70 56 74 61 62 20 29  );.  if( pVtab )
256b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
256c0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
256d0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
256e0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
256f0 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
25700 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
25710 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
25720 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
25730 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
25740 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
25750 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25760 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
25770 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50  VCreate P1 * * P
25780 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
25790 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
257a0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
257b0 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c  atabase P1. Call
257c0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
257d0 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20  hod.** for that 
257e0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
257f0 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72  P_VCreate: {.  r
25800 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
25810 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
25820 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
25830 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
25840 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
25850 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
25860 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
25870 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25880 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25890 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
258a0 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
258b0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
258c0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
258d0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
258e0 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
258f0 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
25900 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
25910 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
25920 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
25930 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
25940 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 2;.  rc = sqli
25950 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
25960 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
25970 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d  pOp->p4.z);.  p-
25980 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
25990 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  0;.  break;.}.#e
259a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
259b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
259c0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
259d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
259e0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
259f0 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
25a00 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
25a10 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
25a20 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
25a30 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
25a40 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
25a50 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
25a60 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
25a70 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
25a80 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
25a90 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
25aa0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
25ab0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
25ac0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
25ad0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
25ae0 72 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  r = 0;.  sqlite3
25af0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
25b00 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 0a  tabCursor = 0;..
25b10 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
25b20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
25b30 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
25b40 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
25b50 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
25b60 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
25b70 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 70  ule;..  assert(p
25b80 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
25b90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
25ba0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
25bb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25bc0 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
25bd0 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
25be0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
25bf0 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  or);.  sqlite3Db
25c00 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
25c10 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
25c20 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
25c30 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
25c40 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
25c50 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
25c60 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
25c70 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
25c80 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
25c90 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
25ca0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
25cb0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
25cc0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
25cd0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
25ce0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
25cf0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76   /* Initialise v
25d00 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
25d10 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
25d20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
25d30 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 70 4f 70 5b  , pOp->p1, &pOp[
25d40 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  -1], -1, 0);.   
25d50 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
25d60 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
25d70 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
25d80 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  or;.      pCur->
25d90 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43  pModule = pVtabC
25da0 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d  ursor->pVtab->pM
25db0 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65  odule;.    }else
25dc0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
25dd0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
25de0 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
25df0 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
25e00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
25e10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
25e20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25e30 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
25e40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25e50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25e60 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
25e70 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
25e80 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
25e90 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
25ea0 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
25eb0 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
25ec0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
25ed0 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
25ee0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
25ef0 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
25f00 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
25f10 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
25f20 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
25f30 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
25f40 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
25f50 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
25f60 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
25f70 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
25f80 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
25f90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
25fa0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25fb0 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
25fc0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
25fd0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
25fe0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
25ff0 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
26000 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
26010 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
26020 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
26030 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
26040 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
26050 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
26060 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
26070 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
26080 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
26090 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
260a0 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
260b0 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
260c0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
260d0 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
260e0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
260f0 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
26100 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
26110 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
26120 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
26130 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
26140 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
26150 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
26160 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
26170 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
26180 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
26190 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
261a0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
261b0 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
261c0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
261d0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
261e0 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ery = &p->aMem[p
261f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p3];.  Mem *
26200 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
26210 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  1];.  sqlite3_vt
26220 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
26230 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
26240 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 0a  3_vtab *pVtab;..
26250 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26260 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
26270 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52 45 47 49 53  p->p1];..  REGIS
26280 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
26290 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
262a0 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
262b0 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
262c0 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
262d0 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
262e0 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
262f0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
26300 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
26310 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
26320 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
26330 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
26340 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
26350 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
26360 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
26370 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
26380 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
26390 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
263a0 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
263b0 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
263c0 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
263d0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
263e0 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e  od */.  {.    in
263f0 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69  t res = 0;.    i
26400 6e 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a  nt i;.    Mem **
26410 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
26420 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
26430 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
26440 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
26450 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20  &pArgc[i+1];.   
26460 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
26470 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20  (apArg[i], 0);. 
26480 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 73 71     }..    if( sq
26490 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
264a0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
264b0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
264c0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f     sqlite3VtabLo
264d0 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 70  ck(pVtab);.    p
264e0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
264f0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
26500 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
26510 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
26520 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
26530 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
26540 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
26550 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
26560 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
26570 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
26580 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
26590 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
265a0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
265b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
265c0 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
265d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
265e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
265f0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
26600 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f  >xEof(pVtabCurso
26610 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  r);.    }.    if
26620 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
26630 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
26640 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
26650 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  ;..    if( res )
26660 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
26670 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
26680 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
26690 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
266a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
266b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
266c0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
266d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
266e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
266f0 4f 70 63 6f 64 65 3a 20 56 52 6f 77 69 64 20 50  Opcode: VRowid P
26700 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26710 20 53 74 6f 72 65 20 69 6e 74 6f 20 72 65 67 69   Store into regi
26720 73 74 65 72 20 50 32 20 20 74 68 65 20 72 6f 77  ster P2  the row
26730 69 64 20 6f 66 0a 2a 2a 20 74 68 65 20 76 69 72  id of.** the vir
26740 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
26750 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
26760 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f   pointing to..*/
26770 0a 63 61 73 65 20 4f 50 5f 56 52 6f 77 69 64 3a  .case OP_VRowid:
26780 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
26790 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
267a0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  e */.  sqlite3_v
267b0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
267c0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
267d0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 73  le *pModule;.  s
267e0 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 52 6f 77  qlite_int64 iRow
267f0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
26800 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
26810 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 61 73 73  pOp->p1];..  ass
26820 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
26830 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
26840 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
26850 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
26860 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
26870 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
26880 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
26890 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
268a0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
268b0 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 69  e->xRowid );.  i
268c0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
268d0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
268e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
268f0 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  se;.  rc = pModu
26900 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 75 72 2d  le->xRowid(pCur-
26910 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 69  >pVtabCursor, &i
26920 52 6f 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Row);.  sqlite3D
26930 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
26940 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
26950 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
26960 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
26970 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66  ErrMsg = 0;.  if
26980 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
26990 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
269a0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
269b0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
269c0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
269d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
269e0 20 69 52 6f 77 3b 0a 20 20 62 72 65 61 6b 3b 0a   iRow;.  break;.
269f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
26a00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26a10 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
26a20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26a30 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
26a40 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
26a50 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
26a60 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
26a70 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
26a80 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
26a90 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
26aa0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
26ab0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
26ac0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
26ad0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
26ae0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
26af0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
26b00 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
26b10 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
26b20 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
26b30 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
26b40 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
26b50 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
26b60 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
26b70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26b80 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
26b90 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
26ba0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
26bb0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
26bc0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
26bd0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
26be0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p3];.  if( pCu
26bf0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
26c00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
26c10 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
26c20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
26c30 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
26c40 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
26c50 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
26c60 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
26c70 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
26c80 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
26c90 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
26ca0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
26cb0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
26cc0 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
26cd0 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
26ce0 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
26cf0 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
26d00 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
26d10 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
26d20 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
26d30 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
26d40 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
26d50 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
26d60 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
26d70 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
26d80 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
26d90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
26da0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
26db0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
26dc0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
26dd0 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
26de0 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ull);..  if( sql
26df0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
26e00 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
26e10 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
26e20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
26e30 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
26e40 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
26e50 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
26e60 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
26e70 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
26e80 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
26e90 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
26ea0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
26eb0 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74   0;..  /* Copy t
26ec0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
26ed0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
26ee0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
26ef0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
26f00 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
26f10 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
26f20 72 6f 72 20 6f 63 63 75 72 65 64 20 74 6f 20 65  ror occured to e
26f30 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64  nsure any.  ** d
26f40 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f  ynamic allocatio
26f50 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20  n in sContext.s 
26f60 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69  (a Mem struct) i
26f70 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a  s  released..  *
26f80 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
26f90 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73  hangeEncoding(&s
26fa0 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64  Context.s, encod
26fb0 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ing);.  REGISTER
26fc0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
26fd0 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74 65  pDest);.  sqlite
26fe0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65  3VdbeMemMove(pDe
26ff0 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29  st, &sContext.s)
27000 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
27010 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
27020 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
27030 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
27040 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
27050 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a  _to_misuse;.  }.
27060 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
27070 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74  eMemTooBig(pDest
27080 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
27090 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
270a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
270b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
270c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
270d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
270e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
270f0 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
27100 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
27110 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
27120 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
27130 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
27140 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
27150 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
27160 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
27170 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
27180 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
27190 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
271a0 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
271b0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
271c0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
271d0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
271e0 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
271f0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
27200 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
27210 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
27220 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
27230 65 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30  e;.  int res = 0
27240 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
27250 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
27260 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27270 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
27280 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
27290 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
272a0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
272b0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
272c0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
272d0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
272e0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
272f0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
27300 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
27310 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
27320 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
27330 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
27340 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
27350 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
27360 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
27370 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
27380 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
27390 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
273a0 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
273b0 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
273c0 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
273d0 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
273e0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
273f0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
27400 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
27410 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
27420 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
27430 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
27440 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
27450 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
27460 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
27470 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  sor..  */.  if( 
27480 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
27490 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
274a0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
274b0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  .  sqlite3VtabLo
274c0 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e  ck(pVtab);.  p->
274d0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
274e0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
274f0 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
27500 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
27510 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
27520 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  0;.  sqlite3DbFr
27530 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
27540 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
27550 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
27560 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
27570 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  Msg = 0;.  sqlit
27580 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
27590 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
275a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
275b0 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
275c0 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
275d0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
275e0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
275f0 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
27600 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
27610 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72 65  suse;..  if( !re
27620 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
27630 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
27640 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
27650 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
27660 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27670 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27680 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27690 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
276a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
276b0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
276c0 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
276d0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
276e0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
276f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
27700 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
27710 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
27720 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
27730 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
27740 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
27750 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
27760 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
27770 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
27780 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
27790 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
277a0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
277b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
277c0 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
277d0 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f  vtab *pVtab = pO
277e0 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 4d  p->p4.pVtab;.  M
277f0 65 6d 20 2a 70 4e 61 6d 65 20 3d 20 26 70 2d 3e  em *pName = &p->
27800 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
27810 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
27820 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
27830 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
27840 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
27850 61 6d 65 29 3b 0a 0a 20 20 53 74 72 69 6e 67 69  ame);..  Stringi
27860 66 79 28 70 4e 61 6d 65 2c 20 65 6e 63 6f 64 69  fy(pName, encodi
27870 6e 67 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  ng);..  if( sqli
27880 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
27890 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
278a0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 73  e_to_misuse;.  s
278b0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70  qlite3VtabLock(p
278c0 56 74 61 62 29 3b 0a 20 20 72 63 20 3d 20 70 56  Vtab);.  rc = pV
278d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
278e0 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
278f0 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65  me->z);.  sqlite
27900 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
27910 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
27920 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
27930 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
27940 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
27950 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
27960 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
27970 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
27980 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
27990 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
279a0 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  se;..  break;.}.
279b0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
279c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
279d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
279e0 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
279f0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
27a00 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
27a10 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
27a20 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
27a30 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
27a40 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
27a50 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
27a60 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
27a70 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
27a80 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
27a90 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
27aa0 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
27ab0 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
27ac0 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
27ad0 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
27ae0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
27af0 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
27b00 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
27b10 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
27b20 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
27b30 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
27b40 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
27b50 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
27b60 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
27b70 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
27b80 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
27b90 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
27ba0 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
27bb0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
27bc0 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
27bd0 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
27be0 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
27bf0 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
27c00 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
27c10 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
27c20 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
27c30 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
27c40 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
27c50 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
27c60 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
27c70 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
27c80 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
27c90 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
27ca0 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
27cb0 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
27cc0 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
27cd0 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
27ce0 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
27cf0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
27d00 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
27d10 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
27d20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
27d30 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
27d40 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
27d50 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
27d60 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
27d70 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
27d80 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
27d90 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
27da0 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
27db0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
27dc0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
27dd0 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
27de0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
27df0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
27e00 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
27e10 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63  t inserted..*/.c
27e20 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
27e30 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
27e40 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70   *pVtab = pOp->p
27e50 34 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74  4.pVtab;.  sqlit
27e60 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
27e70 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
27e80 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
27e90 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
27ea0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
27eb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
27ec0 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
27ed0 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 55   if( pModule->xU
27ee0 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20  pdate==0 ){.    
27ef0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
27f00 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
27f10 2c 20 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62  , "read-only tab
27f20 6c 65 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  le");.    rc = S
27f30 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
27f40 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69 3b  else{.    int i;
27f50 0a 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  .    sqlite_int6
27f60 34 20 72 6f 77 69 64 3b 0a 20 20 20 20 4d 65 6d  4 rowid;.    Mem
27f70 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61 70   **apArg = p->ap
27f80 41 72 67 3b 0a 20 20 20 20 4d 65 6d 20 2a 70 58  Arg;.    Mem *pX
27f90 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
27fa0 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
27fb0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
27fc0 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70 65  .      storeType
27fd0 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20 20  Info(pX, 0);.   
27fe0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
27ff0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
28000 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
28010 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
28020 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28030 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
28040 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
28050 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63 20  (pVtab);.    rc 
28060 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
28070 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
28080 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
28090 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
280a0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
280b0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
280c0 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
280d0 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
280e0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
280f0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28100 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
28110 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
28120 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
28130 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
28140 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  suse;.    if( pO
28150 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53 51 4c  p->p1 && rc==SQL
28160 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
28170 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
28180 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
28190 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
281a0 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
281b0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
281c0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
281d0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
281e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
281f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
28200 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28210 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
28220 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
28230 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
28240 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
28250 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28260 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
28270 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
28280 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
28290 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
282a0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
282b0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
282c0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
282d0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
282e0 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
282f0 3b 20 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a  ; .  int nPage;.
28300 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
28310 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
28320 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ger(db->aDb[p1].
28330 70 42 74 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71  pBt);..  rc = sq
28340 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f  lite3PagerPageco
28350 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61  unt(pPager, &nPa
28360 67 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ge);.  if( rc==S
28370 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
28380 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28390 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
283a0 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20  >u.i = nPage;.  
283b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
283c0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
283d0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f  ITE_OMIT_TRACE./
283e0 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20  * Opcode: Trace 
283f0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
28400 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
28410 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
28420 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
28430 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
28440 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
28450 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
28460 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
28470 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
28480 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  back..*/.case OP
28490 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72  _Trace: {.  char
284a0 20 2a 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   *zTrace = (pOp-
284b0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
284c0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
284d0 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
284e0 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
284f0 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54   ){.      db->xT
28500 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
28510 72 67 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  rg, zTrace);.   
28520 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
28530 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
28540 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
28550 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20  TE_SqlTrace)!=0 
28560 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
28570 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
28580 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
28590 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65  Trace);.    }.#e
285a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
285b0 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
285c0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
285d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
285e0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
285f0 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
28600 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
28610 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
28620 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
28630 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
28640 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
28650 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
28660 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
28670 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
28680 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
28690 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
286a0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
286b0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
286c0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
286d0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
286e0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
286f0 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
28700 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
28710 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
28720 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
28730 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
28740 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
28750 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
28760 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
28770 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
28780 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65  Explain */.  bre
28790 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
287a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
287b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
287c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
287d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
287e0 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
287f0 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
28800 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
28810 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
28820 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
28830 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
28840 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
28850 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
28860 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
28870 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
28880 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
28890 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
288a0 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
288b0 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
288c0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
288d0 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
288e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
288f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28920 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
28930 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
28940 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
28950 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74   elapsed = sqlit
28960 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61  e3Hwtime() - sta
28970 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  rt;.      pOp->c
28980 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64  ycles += elapsed
28990 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
289a0 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  ++;.#if 0.      
289b0 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
289c0 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61  , "%10llu ", ela
289d0 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73  psed);.        s
289e0 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
289f0 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63  p(stdout, origPc
28a00 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63  , &p->aOp[origPc
28a10 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
28a20 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
28a30 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
28a40 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
28a50 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
28a60 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
28a70 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
28a80 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
28a90 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
28aa0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
28ab0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
28ac0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
28ad0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
28ae0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
28af0 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
28b00 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
28b10 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
28b20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
28b30 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
28b40 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
28b50 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
28b60 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
28b70 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
28b80 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
28b90 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b   if( p->trace ){
28ba0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
28bb0 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72   ) fprintf(p->tr
28bc0 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ace,"rc=%d\n",rc
28bd0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50  );.      if( opP
28be0 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
28bf0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20  OUT2_PRERELEASE 
28c00 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
28c10 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
28c20 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  e, pOp->p2, pOut
28c30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
28c40 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20   if( opProperty 
28c50 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
28c60 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
28c70 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
28c80 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
28c90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
28ca0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
28cb0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
28cc0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
28cd0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
28ce0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
28cf0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
28d00 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
28d10 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
28d20 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
28d30 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
28d40 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
28d50 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
28d60 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
28d70 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
28d80 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
28d90 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
28da0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
28db0 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
28dc0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
28dd0 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
28de0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
28df0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
28e00 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  RROR;..  /* This
28e10 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
28e20 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
28e30 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
28e40 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
28e50 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
28e60 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
28e70 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
28e80 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
28e90 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c  be_return:.  sql
28ea0 69 74 65 33 42 74 72 65 65 4d 75 74 65 78 41 72  ite3BtreeMutexAr
28eb0 72 61 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75  rayLeave(&p->aMu
28ec0 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
28ed0 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
28ee0 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
28ef0 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
28f00 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
28f10 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
28f20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
28f30 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
28f40 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
28f50 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
28f60 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
28f70 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
28f80 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
28f90 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
28fa0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
28fb0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
28fc0 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
28fd0 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
28fe0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
28ff0 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
29000 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
29010 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
29020 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
29030 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
29040 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
29050 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
29060 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
29070 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
29080 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  error..  */.abor
29090 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a  t_due_to_misuse:
290a0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d  .  rc = SQLITE_M
290b0 49 53 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ISUSE;.  /* Fall
290c0 20 74 68 72 75 20 69 6e 74 6f 20 61 62 6f 72 74   thru into abort
290d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f  _due_to_error */
290e0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
290f0 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
29100 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
29110 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
29120 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
29130 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
29140 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
29150 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
29160 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
29170 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
29180 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
29190 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
291a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
291b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
291c0 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
291d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
291e0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
291f0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
29200 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
29210 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
29220 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
29230 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
29240 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
29250 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
29260 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
29270 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
29280 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
29290 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
292a0 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
292b0 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
292c0 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
292d0 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
292e0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
292f0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29300 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
29310 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
29320 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
29330 61 6c 74 3b 0a 7d 0a                             alt;.}.