/ Hex Artifact Content
Login

Artifact d2c9b71d0a996d87508ec841583ae50d23c9a3db:


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 37 38 35 20 32 30 30 38  e.c,v 1.785 2008
0850: 2f 31 31 2f 30 33 20 32 30 3a 35 35 3a 30 37 20  /11/03 20:55:07 
0860: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
0870: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0880: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74  .h".#include <ct
0890: 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ype.h>.#include 
08a0: 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a  "vdbeInt.h"../*.
08b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
08c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
08d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
08e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
08f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0900: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 4d  ther by the OP_M
0910: 6f 76 65 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  oveXX, OP_Next, 
0920: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0930: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0940: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0950: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0960: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0970: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0980: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0990: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
09a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
09b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
09c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
09f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0a00: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0a10: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0a20: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0a30: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0a40: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0a50: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0a60: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0a70: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0a80: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0a90: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
0aa0: 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20 7a    When reaches z
0ab0: 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49 6e  ero, the u1.isIn
0ac0: 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69 65  terrupted.** fie
0ad0: 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ld of the sqlite
0ae0: 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73  3 structure is s
0af0: 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73  et in order to s
0b00: 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74 65  imulate and inte
0b10: 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  rrupt..**.** Thi
0b20: 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75 73  s facility is us
0b30: 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70  ed for testing p
0b40: 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49  urposes only.  I
0b50: 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74  t does not funct
0b60: 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64  ion.** in an ord
0b70: 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a  inary build..*/.
0b80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0b90: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  ST.int sqlite3_i
0ba0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d  nterrupt_count =
0bb0: 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   0;.#endif../*.*
0bc0: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0bd0: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0be0: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0bf0: 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  ype the OP_Sort 
0c00: 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65  opcode.** is exe
0c10: 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73 74  cuted.  The test
0c20: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0c30: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0c40: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0c50: 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73  at.** sorting is
0c60: 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f   occurring or no
0c70: 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20 61  t occurring at a
0c80: 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65 73  ppropriate times
0c90: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0ca0: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0cb0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0cc0: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0cd0: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ce0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0cf0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0d00: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0d10: 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63  t sqlite3_sort_c
0d20: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0d30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  ../*.** The next
0d40: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
0d50: 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69 7a   records the siz
0d60: 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  e of the largest
0d70: 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20   MEM_Blob.** or 
0d80: 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61 73  MEM_Str that has
0d90: 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61 20   been used by a 
0da0: 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54 68  VDBE opcode.  Th
0db0: 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65  e test procedure
0dc0: 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69 6e  s.** use this in
0dd0: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b  formation to mak
0de0: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
0df0: 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69  zero-blob functi
0e00: 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f  onality.** is wo
0e10: 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e  rking correctly.
0e20: 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65     This variable
0e30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0e40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
0e50: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
0e60: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
0e70: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
0e80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0e90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0ea0: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0eb0: 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 76  ze = 0;.static v
0ec0: 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  oid updateMaxBlo
0ed0: 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20  bsize(Mem *p){. 
0ee0: 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26   if( (p->flags &
0ef0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
0f00: 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e  ob))!=0 && p->n>
0f10: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0f20: 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  size ){.    sqli
0f30: 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
0f40: 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23   = p->n;.  }.}.#
0f50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  endif../*.** Tes
0f60: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20  t a register to 
0f70: 73 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64  see if it exceed
0f80: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61  s the current ma
0f90: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0fa0: 0a 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20  .** If it does, 
0fb0: 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d  record the new m
0fc0: 61 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65  aximum blob size
0fd0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0fe0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
0ff0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1000: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1010: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44  ST).# define UPD
1020: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
1030: 28 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c  (P)  updateMaxBl
1040: 6f 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a  obsize(P).#else.
1050: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
1060: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a  MAX_BLOBSIZE(P).
1070: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
1080: 6e 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20  nvert the given 
1090: 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20  register into a 
10a0: 73 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e  string if it isn
10b0: 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64  't one.** alread
10c0: 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  y. Return non-ze
10d0: 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ro if a malloc()
10e0: 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69   fails..*/.#defi
10f0: 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20  ne Stringify(P, 
1100: 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50  enc) \.   if(((P
1110: 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74  )->flags&(MEM_St
1120: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
1130: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
1140: 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63  mStringify(P,enc
1150: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1160: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1170: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1180: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1190: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
11a0: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
11b0: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
11c0: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
11d0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
11e0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
11f0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
1200: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
1210: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
1220: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
1230: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1240: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1250: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1260: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1270: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1280: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1290: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
12a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
12b0: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
12c0: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
12d0: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
12e0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
12f0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
1300: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
1310: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
1320: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
1330: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1340: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1350: 6e 20 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67  n MEM_Dyn string
1360: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65  ..*/.#define Dee
1370: 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c  phemeralize(P) \
1380: 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c  .   if( ((P)->fl
1390: 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  ags&MEM_Ephem)!=
13a0: 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71  0 \.       && sq
13b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
13c0: 57 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20  Writeable(P) ){ 
13d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f  goto no_mem;}../
13e0: 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65  *.** Call sqlite
13f0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
1400: 6f 62 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70  ob() on the supp
1410: 6c 69 65 64 20 76 61 6c 75 65 20 28 74 79 70 65  lied value (type
1420: 20 4d 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72   Mem*).** P if r
1430: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66  equired..*/.#def
1440: 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50  ine ExpandBlob(P
1450: 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  ) (((P)->flags&M
1460: 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33  EM_Zero)?sqlite3
1470: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
1480: 62 28 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  b(P):0)../*.** A
1490: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
14a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
14b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
14c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
14d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
14e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
14f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1500: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1510: 75 65 72 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63  uery..** The sec
1520: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 2c 20 27 64  ond argument, 'd
1530: 62 5f 65 6e 63 27 20 69 73 20 74 68 65 20 74 65  b_enc' is the te
1540: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
1550: 20 62 79 20 74 68 65 20 76 64 62 65 20 66 6f 72   by the vdbe for
1560: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 76 61 72  .** register var
1570: 69 61 62 6c 65 73 2e 20 20 54 68 69 73 20 72 6f  iables.  This ro
1580: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1590: 4d 65 6d 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65  Mem->enc and pMe
15a0: 6d 2d 3e 74 79 70 65 0a 2a 2a 20 76 61 72 69 61  m->type.** varia
15b0: 62 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65  bles used by the
15c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
15d0: 28 29 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  () routines..*/.
15e0: 23 64 65 66 69 6e 65 20 73 74 6f 72 65 54 79 70  #define storeTyp
15f0: 65 49 6e 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72  eInfo(A,B) _stor
1600: 65 54 79 70 65 49 6e 66 6f 28 41 29 0a 73 74 61  eTypeInfo(A).sta
1610: 74 69 63 20 76 6f 69 64 20 5f 73 74 6f 72 65 54  tic void _storeT
1620: 79 70 65 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65  ypeInfo(Mem *pMe
1630: 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20  m){.  int flags 
1640: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20  = pMem->flags;. 
1650: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1660: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65  _Null ){.    pMe
1670: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
1680: 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73  _NULL;.  }.  els
1690: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16a0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65  M_Int ){.    pMe
16b0: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
16c0: 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20  _INTEGER;.  }.  
16d0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
16e0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
16f0: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1700: 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a  LITE_FLOAT;.  }.
1710: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1720: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
1730: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1740: 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65  QLITE_TEXT;.  }e
1750: 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  lse{.    pMem->t
1760: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
1770: 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  B;.  }.}../*.** 
1780: 50 72 6f 70 65 72 74 69 65 73 20 6f 66 20 6f 70  Properties of op
1790: 63 6f 64 65 73 2e 20 20 54 68 65 20 4f 50 46 4c  codes.  The OPFL
17a0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61  G_INITIALIZER ma
17b0: 63 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  cro is.** create
17c0: 64 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61  d by mkopcodeh.a
17d0: 77 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c  wk during compil
17e0: 61 74 69 6f 6e 2e 20 20 44 61 74 61 20 69 73 20  ation.  Data is 
17f0: 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d  obtained.** from
1800: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f   the comments fo
1810: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 22 63 61 73  llowing the "cas
1820: 65 20 4f 50 5f 78 78 78 78 3a 22 20 73 74 61 74  e OP_xxxx:" stat
1830: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69  ements in.** thi
1840: 73 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61  s file.  .*/.sta
1850: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
1860: 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65 50 72  ed char opcodePr
1870: 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47  operty[] = OPFLG
1880: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f  _INITIALIZER;../
1890: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
18a0: 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20 68 61   if an opcode ha
18b0: 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f 50 46  s any of the OPF
18c0: 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74 69 65  LG_xxx propertie
18d0: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
18e0: 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73  y mask..*/.int s
18f0: 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f 64 65  qlite3VdbeOpcode
1900: 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e 74 20  HasProperty(int 
1910: 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b  opcode, int mask
1920: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f 70 63  ){.  assert( opc
1930: 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c  ode>0 && opcode<
1940: 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50 72 6f  sizeof(opcodePro
1950: 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65 74 75  perty) );.  retu
1960: 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70 65 72  rn (opcodeProper
1970: 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73 6b 29  ty[opcode]&mask)
1980: 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  !=0;.}../*.** Al
1990: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
19a0: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
19b0: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
19c0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
19d0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
19e0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
19f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1a00: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1a10: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1a20: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1a30: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1a40: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1a50: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1a60: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a70: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a80: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 2c 20 20 20  */.  Op *pOp,   
1a90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 2a 2f             /* */
1aa0: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1ab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 2a 2f 0a 20           /* */. 
1ac0: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1ad0: 6f 72 20 20 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a  or     /* */.){.
1ae0: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
1af0: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
1b00: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
1b10: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
1b20: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
1b30: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
1b40: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1b50: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1b60: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1b70: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1b80: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1b90: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1ba0: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1bb0: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1bc0: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1bd0: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1be0: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
1bf0: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
1c00: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
1c10: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
1c20: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
1c30: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
1c40: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1c50: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1c60: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1c70: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1c80: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1c90: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1ca0: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1cb0: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1cc0: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1cd0: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1ce0: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
1cf0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1d00: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
1d10: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
1d20: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
1d30: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
1d40: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1d50: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1d60: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1d70: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1d80: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1d90: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1da0: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1db0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1dc0: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1dd0: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1de0: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
1df0: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
1e00: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
1e10: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
1e20: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
1e30: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
1e40: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1e50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1e60: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1e70: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1e80: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1e90: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1ea0: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1eb0: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1ec0: 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63 6f 64   /* If the opcod
1ed0: 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50 5f 53  e of pOp is OP_S
1ee0: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20 74 68  etNumColumns, th
1ef0: 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e 74 61  en pOp->p2 conta
1f00: 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  ins.  ** the num
1f10: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1f20: 20 74 68 65 20 72 65 63 6f 72 64 73 20 63 6f 6e   the records con
1f30: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61  tained in the ta
1f40: 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e 64 65  ble or.  ** inde
1f50: 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1f60: 55 73 65 20 74 68 69 73 20 74 6f 20 72 65 73 65  Use this to rese
1f70: 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 74 68  rve space for th
1f80: 65 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73  e .  ** VdbeCurs
1f90: 6f 72 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79  or.aType[] array
1fa0: 2e 0a 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ..  */.  int nFi
1fb0: 65 6c 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  eld = 0;.  if( p
1fc0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
1fd0: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20  etNumColumns || 
1fe0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1ff0: 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b  OpenEphemeral ){
2000: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
2010: 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79  p->p2;.  }.  nBy
2020: 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65  te = .      size
2030: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b  of(VdbeCursor) +
2040: 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65   .      (isBtree
2050: 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74  Cursor?sqlite3Bt
2060: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a  reeCursorSize():
2070: 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46  0) + .      2*nF
2080: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
2090: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
20a0: 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  r<p->nCursor );.
20b0: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
20c0: 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  Cur] ){.    sqli
20d0: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
20e0: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
20f0: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
2100: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2110: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2120: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2130: 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74  mGrow(pMem, nByt
2140: 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e  e, 0) ){.    p->
2150: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2160: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2170: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2180: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
2190: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78   nByte);.    pCx
21a0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
21b0: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
21c0: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e  Field;.    if( n
21d0: 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70  Field ){.      p
21e0: 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32  Cx->aType = (u32
21f0: 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65   *)&pMem->z[size
2200: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b  of(VdbeCursor)];
2210: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
2220: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2230: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2240: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2250: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2260: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
2270: 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a  ursor)+2*nField*
2280: 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20  sizeof(u32)];.  
2290: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
22a0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
22b0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
22c0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
22d0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
22e0: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
22f0: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
2300: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2310: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2320: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2330: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2340: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2350: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2360: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
2370: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
2380: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
2390: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73  e it alone..*/.s
23a0: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
23b0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
23c0: 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66  Mem *pRec){.  if
23d0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
23e0: 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49   (MEM_Real|MEM_I
23f0: 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt))==0 ){.    i
2400: 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20  nt realnum;.    
2410: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2420: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2430: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2440: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a  >flags&MEM_Str).
2450: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
2460: 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63  te3IsNumber(pRec
2470: 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70  ->z, &realnum, p
2480: 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20  Rec->enc) ){.   
2490: 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20     i64 value;.  
24a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
24b0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52  hangeEncoding(pR
24c0: 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  ec, SQLITE_UTF8)
24d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61  ;.      if( !rea
24e0: 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41  lnum && sqlite3A
24f0: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
2500: 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20  value) ){.      
2510: 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61    pRec->u.i = va
2520: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lue;.        Mem
2530: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2540: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
2550: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2560: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2570: 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20  ealify(pRec);.  
2580: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2590: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
25a0: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
25b0: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
25c0: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
25d0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
25e0: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
25f0: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2600: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2610: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2620: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2630: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2640: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2650: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2660: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2670: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2680: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2690: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
26a0: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
26b0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
26c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
26d0: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
26e0: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
26f0: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2700: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2710: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2720: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2730: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2740: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2750: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2760: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2770: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2780: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2790: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
27a0: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
27b0: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
27c0: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
27d0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
27e0: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
27f0: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2800: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2810: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2820: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2830: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2840: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2850: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2860: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2870: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2880: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2890: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
28a0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
28b0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
28c0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
28d0: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
28e0: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
28f0: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2900: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2910: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2920: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2930: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2940: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2950: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2960: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
2970: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2980: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
2990: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
29a0: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
29b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29c0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
29d0: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
29e0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
29f0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2a00: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
2a10: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
2a20: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
2a30: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
2a40: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
2a50: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
2a60: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2a70: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2a80: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2a90: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2aa0: 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  );.    applyNume
2ab0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
2ac0: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
2ad0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
2ae0: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
2af0: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2b00: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2b10: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2b20: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
2b30: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
2b40: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
2b50: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2b60: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2b70: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2b80: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2b90: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2ba0: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2bb0: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2bc0: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2bd0: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2be0: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2bf0: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2c00: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
2c10: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
2c20: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
2c30: 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ument..**.** Thi
2c40: 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45  s is an EXPERIME
2c50: 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20  NTAL api and is 
2c60: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
2c70: 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f  e or removal..*/
2c80: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2c90: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2ca0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2cb0: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  Val){.  Mem *pMe
2cc0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2cd0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2ce0: 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20  finity(pMem);.  
2cf0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d  storeTypeInfo(pM
2d00: 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  em, 0);.  return
2d10: 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a   pMem->type;.}..
2d20: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d30: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d40: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d50: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2d60: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2d70: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2d80: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2d90: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2da0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2db0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2dc0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2dd0: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2de0: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2df0: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e00: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e10: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2e20: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2e30: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2e40: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2e50: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2e60: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2e70: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2e80: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2e90: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2ea0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2eb0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2ec0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2ed0: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2ee0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2ef0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2f00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2f10: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2f20: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2f30: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2f40: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2f50: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2f60: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2f70: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2f80: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2f90: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2fa0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fb0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2fc0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2fd0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
2fe0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
2ff0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3000: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3010: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3020: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3030: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3040: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
3050: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3060: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3070: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3080: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3090: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
30a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
30b0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
30c0: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
30d0: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
30e0: 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sr);.    sqlite3
30f0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3100: 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d  Csr, "%d[", pMem
3110: 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  ->n);.    zCsr +
3120: 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29 3b 0a  = strlen(zCsr);.
3130: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3140: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3150: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
3160: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3170: 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20  , zCsr, "%02X", 
3180: 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d  ((int)pMem->z[i]
3190: 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20   & 0xFF));.     
31a0: 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28   zCsr += strlen(
31b0: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
31c0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
31d0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
31e0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
31f0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3200: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3210: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3220: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3230: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3240: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3250: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3260: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3270: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3280: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3290: 74 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20  trlen(zCsr);.   
32a0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
32b0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
32c0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
32d0: 20 7a 43 73 72 2c 22 2b 25 6c 6c 64 7a 22 2c 70   zCsr,"+%lldz",p
32e0: 4d 65 6d 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 20  Mem->u.i);.     
32f0: 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28   zCsr += strlen(
3300: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3310: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3320: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3330: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3340: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3350: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
3360: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
3370: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3380: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3390: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33a0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
33b0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
33c0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
33d0: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
33e0: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3410: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3420: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3430: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3440: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3450: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3460: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3470: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3480: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3490: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
34a0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
34b0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
34c0: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
34d0: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
34e0: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 74 72 6c  );.    k += strl
34f0: 65 6e 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  en(&zBuf[k]);.  
3500: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3510: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3520: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3530: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3540: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3550: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3560: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3570: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3580: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3590: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
35a0: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
35b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35c0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
35d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
35e0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
35f0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3600: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3610: 2b 3d 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b  += strlen(&zBuf[
3620: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3630: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3640: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3650: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3660: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3670: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3680: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3690: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
36a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
36b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
36c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
36d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
36e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
36f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3700: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3710: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3720: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3730: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3760: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3770: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3780: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3790: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
37a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
37b0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
37c0: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
37d0: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
37e0: 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 20   r:%g", p->r);. 
37f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
3800: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
3810: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3820: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
3830: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
3840: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
3850: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
3860: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
3870: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
3880: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
3890: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
38a0: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
38b0: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
38c0: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
38d0: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
38e0: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
38f0: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
3900: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3910: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
3920: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3930: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
3940: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3950: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
3960: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
3970: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
3980: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
3990: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
39a0: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
39b0: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
39c0: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
39d0: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
39e0: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
39f0: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
3a00: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
3a10: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
3a20: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3a30: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3a40: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3a50: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3a60: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3a70: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3a80: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3a90: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3aa0: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3ab0: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3ac0: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3ad0: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3ae0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3af0: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3b00: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3b10: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3b20: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3b30: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3b40: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3b50: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3b60: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3b70: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3b80: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3b90: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3ba0: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3bb0: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3bc0: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3bd0: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3be0: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3bf0: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3c00: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3c10: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3c20: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3c30: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3c40: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3c50: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3c60: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3c70: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3c80: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3c90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3ca0: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3cb0: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3cc0: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3cd0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3ce0: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3cf0: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3d00: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3d10: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3d20: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3d30: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3d40: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3d50: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3d60: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3d70: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3d80: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3d90: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3da0: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3db0: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3dc0: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3dd0: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3de0: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3df0: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3e00: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3e10: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3e20: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3e30: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3e40: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3e50: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3e60: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
3e80: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
3e90: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
3ea0: 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20   as we can then 
3eb0: 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71  return..**.** sq
3ec0: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61  lite3VdbeMakeRea
3ed0: 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c  dy() must be cal
3ee0: 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73 20  led before this 
3ef0: 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
3f00: 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65   to.** close the
3f10: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20   program with a 
3f20: 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e  final OP_Halt an
3f30: 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65 20  d to set up the 
3f40: 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64  callbacks.** and
3f50: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
3f60: 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a  ge pointer..**.*
3f70: 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77  * Whenever a row
3f80: 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61 20   or result data 
3f90: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68  is available, th
3fa0: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
3fb0: 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65  either.** invoke
3fc0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c   the result call
3fd0: 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69  back (if there i
3fe0: 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e  s one) or return
3ff0: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4000: 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  ROW..**.** If an
4010: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
4020: 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65   to open a locke
4030: 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  d database, then
4040: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
4050: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76   will either inv
4060: 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61 6c  oke the busy cal
4070: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4080: 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69  is one) or it wi
4090: 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c  ll.** return SQL
40a0: 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20  ITE_BUSY..**.** 
40b0: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
40c0: 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  rs, an error mes
40d0: 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e 20  sage is written 
40e0: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
40f0: 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ed.** from sqlit
4100: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  e3_malloc() and 
4110: 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61  p->zErrMsg is ma
4120: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  de to point to t
4130: 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54  hat memory..** T
4140: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  he error code is
4150: 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63   stored in p->rc
4160: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
4170: 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
4180: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  _ERROR..**.** If
4190: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76   the callback ev
41a0: 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  er returns non-z
41b0: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ero, then the pr
41c0: 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69  ogram exits.** i
41d0: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65  mmediately.  The
41e0: 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72  re will be no er
41f0: 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74 20  ror message but 
4200: 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20  the p->rc field 
4210: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c  is.** set to SQL
4220: 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68  ITE_ABORT and th
4230: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
4240: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
4250: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d  ROR..**.** A mem
4260: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65  ory allocation e
4270: 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72  rror causes p->r
4280: 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53  c to be set to S
4290: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20  QLITE_NOMEM and 
42a0: 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20  this.** routine 
42b0: 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  to return SQLITE
42c0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74  _ERROR..**.** Ot
42d0: 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73  her fatal errors
42e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
42f0: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65  RROR..**.** Afte
4300: 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68  r this routine h
4310: 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c  as finished, sql
4320: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
4330: 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  () should be.** 
4340: 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70  used to clean up
4350: 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20 77   the mess that w
4360: 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a  as left behind..
4370: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
4380: 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a  beExec(.  Vdbe *
4390: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
43a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
43b0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3b   */.){.  int pc;
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
43e0: 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  am counter */.  
43f0: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
4400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
4410: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
4420: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
4430: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
4440: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
4450: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
4460: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
4470: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4480: 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  se */.  u8 encod
4490: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
44a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
44b0: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
44c0: 20 4d 65 6d 20 2a 70 49 6e 31 2c 20 2a 70 49 6e   Mem *pIn1, *pIn
44d0: 32 2c 20 2a 70 49 6e 33 3b 20 20 20 2f 2a 20 49  2, *pIn3;   /* I
44e0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 73 20 2a 2f  nput operands */
44f0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 20 20 20  .  Mem *pOut;   
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4510: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4520: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4530: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4540: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4550: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
4560: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
4570: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
4580: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
4590: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
45a0: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
45b0: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
45c0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45d0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45e0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45f0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4600: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4610: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4620: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4640: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4650: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4660: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
4670: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4680: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4690: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
46a0: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
46b0: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
46c0: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
46d0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
46e0: 64 69 66 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  dif.  UnpackedRe
46f0: 63 6f 72 64 20 61 54 65 6d 70 52 65 63 5b 31 36  cord aTempRec[16
4700: 5d 3b 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68  ]; /* Space to h
4710: 6f 6c 64 20 61 20 74 72 61 6e 73 69 65 6e 74 20  old a transient 
4720: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
4730: 2f 0a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  /...  assert( p-
4740: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4750: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4760: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4770: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4780: 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69  assert( db->magi
4790: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
47a0: 42 55 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65  BUSY );.  sqlite
47b0: 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79  3BtreeMutexArray
47c0: 45 6e 74 65 72 28 26 70 2d 3e 61 4d 75 74 65 78  Enter(&p->aMutex
47d0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  );.  if( p->rc==
47e0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
47f0: 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
4800: 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ens if a malloc(
4810: 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20  ) inside a call 
4820: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  to sqlite3_colum
4830: 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20  n_text() or.    
4840: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ** sqlite3_colum
4850: 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65  n_text16() faile
4860: 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  d.  */.    goto 
4870: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
4880: 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c  sert( p->rc==SQL
4890: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
48a0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
48b0: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
48c0: 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _OK;.  assert( p
48d0: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
48e0: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
48f0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4900: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4910: 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
4920: 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74  TERRUPT;.  sqlit
4930: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4940: 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  (p);.#ifdef SQLI
4950: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4960: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4970: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4980: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4990: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
49a0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
49b0: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
49c0: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
49d0: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
49e0: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
49f0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4a00: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4a10: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4a20: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4a30: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4a40: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4a50: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4a60: 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70  dout, i, &p->aOp
4a70: 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  [i]);.    }.  }.
4a80: 20 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73    if( fileExists
4a90: 28 64 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65  (db, "vdbe_trace
4aa0: 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61  ") ){.    p->tra
4ab0: 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d  ce = stdout;.  }
4ac0: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4ad0: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4ae0: 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e  dif.  for(pc=p->
4af0: 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  pc; rc==SQLITE_O
4b00: 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73  K; pc++){.    as
4b10: 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70  sert( pc>=0 && p
4b20: 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20  c<p->nOp );.    
4b30: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
4b40: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
4b50: 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f  em;.#ifdef VDBE_
4b60: 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67  PROFILE.    orig
4b70: 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61  Pc = pc;.    sta
4b80: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4b90: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4ba0: 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70   pOp = &p->aOp[p
4bb0: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
4bc0: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
4bd0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
4be0: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
4bf0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4c00: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
4c10: 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
4c20: 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20  if( pc==0 ){.   
4c30: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
4c40: 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63  E Execution Trac
4c50: 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  e:\n");.        
4c60: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4c70: 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a  Sql(p);.      }.
4c80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4c90: 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63  ePrintOp(p->trac
4ca0: 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20  e, pc, pOp);.   
4cb0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72   }.    if( p->tr
4cc0: 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20  ace==0 && pc==0 
4cd0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4ce0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4cf0: 63 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66  c();.      if( f
4d00: 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76  ileExists(db, "v
4d10: 64 62 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29  dbe_sqltrace") )
4d20: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4d30: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4d40: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4d50: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4d60: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a  Malloc();.    }.
4d70: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
4d80: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
4d90: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
4da0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
4db0: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
4dc0: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
4dd0: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
4de0: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
4df0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4e00: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
4e10: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4e20: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
4e30: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4e40: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
4e50: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
4e60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4e70: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
4e80: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
4e90: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
4ea0: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
4eb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4ec0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4ed0: 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c  LBACK.    /* Cal
4ee0: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
4ef0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
4f00: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
4f10: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
4f20: 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44  ber.    ** of VD
4f30: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
4f40: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
4f50: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
4f60: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a  ocation of.    *
4f70: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
4f80: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
4f90: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
4fa0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
4fb0: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a   called)..    **
4fc0: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
4fd0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
4fe0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
4ff0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5000: 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a  hine with.    **
5010: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
5020: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20  QLITE_ABORT..   
5030: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
5040: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
5050: 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67     if( db->nProg
5060: 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65  ressOps==nProgre
5070: 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20  ssOps ){.       
5080: 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20   int prc;.      
5090: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
50a0: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
50b0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
50c0: 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70  isuse;.        p
50d0: 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73  rc =db->xProgres
50e0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
50f0: 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  rg);.        if(
5100: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
5110: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
5120: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
5130: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
5140: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5150: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5160: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5170: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5180: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5190: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
51a0: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
51b0: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
51c0: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
51d0: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44  #endif..    /* D
51e0: 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70  o common setup p
51f0: 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e  rocessing for an
5200: 79 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73  y opcode that is
5210: 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77   marked.    ** w
5220: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
5230: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20  erelease" tag.  
5240: 53 75 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76  Such opcodes hav
5250: 65 20 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a  e a single.    *
5260: 2a 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69  * output which i
5270: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
5280: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e  he P2 parameter.
5290: 20 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65    The P2 registe
52a0: 72 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74  r.    ** is init
52b0: 69 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c  ialized to a NUL
52c0: 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70  L..    */.    op
52d0: 50 72 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64  Property = opcod
52e0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
52f0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20  pcode];.    if( 
5300: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5310: 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
5320: 41 53 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ASE)!=0 ){.     
5330: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5340: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5350: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5360: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f  nMem );.      pO
5370: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
5380: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71  p->p2];.      sq
5390: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
53a0: 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74  aseExternal(pOut
53b0: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
53c0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
53d0: 0a 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20  .    }else. .   
53e0: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
53f0: 74 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20  tup for opcodes 
5400: 6d 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20  marked with one 
5410: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5420: 0a 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74  .    ** combinat
5430: 69 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69  ions of properti
5440: 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  es..    **.    *
5450: 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a  *           in1.
5460: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
5470: 20 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20   in1 in2.    ** 
5480: 20 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e            in1 in
5490: 32 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20  2 out3.    **   
54a0: 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a          in1 in3.
54b0: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61      **.    ** Va
54c0: 72 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49  riables pIn1, pI
54d0: 6e 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65  n2, and pIn3 are
54e0: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
54f0: 6f 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20  o appropriate.  
5500: 20 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66    ** registers f
5510: 6f 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69  or inputs.  Vari
5520: 61 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73  able pOut points
5530: 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72   to the output r
5540: 65 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a  egister..    */.
5550: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5560: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5570: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5580: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
5590: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
55a0: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
55b0: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d   );.      pIn1 =
55c0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
55d0: 31 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  1];.      REGIST
55e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
55f0: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69  , pIn1);.      i
5600: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5610: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5620: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5630: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5640: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5650: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5660: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20  );.        pIn2 
5670: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5680: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47  p2];.        REG
5690: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
56a0: 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  >p2, pIn2);.    
56b0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
56c0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
56d0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
56e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
56f0: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20  3>0 );.         
5700: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5710: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5720: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70         pOut = &p
5730: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
5740: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5750: 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72   }else if( (opPr
5760: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5770: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5780: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5790: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
57a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
57b0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57c0: 20 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d     pIn3 = &p->aM
57d0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
57e0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
57f0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e  ACE(pOp->p3, pIn
5800: 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  3);.      }.    
5810: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5820: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5830: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
5840: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5850: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5860: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
5870: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32  em );.      pIn2
5880: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5890: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49  >p2];.      REGI
58a0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
58b0: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  p2, pIn2);.    }
58c0: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
58d0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
58e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
58f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5900: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5910: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
5920: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20  m );.      pIn3 
5930: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5940: 70 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p3];.      REGIS
5950: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5960: 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a  3, pIn3);.    }.
5970: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5980: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
59e0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
59f0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5a00: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5a10: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5a20: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5a30: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5a40: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5a50: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5a60: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5a70: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5a80: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5a90: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5aa0: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5ab0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5ac0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5ad0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5ae0: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5af0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5b00: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5b10: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5b20: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5b30: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5b40: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5b50: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5b60: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5b70: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5b80: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5b90: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5ba0: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5bb0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5bc0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5bd0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5be0: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5bf0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5c00: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5c10: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5c20: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5c30: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5c40: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5c50: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5c60: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5c70: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5c80: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5c90: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5ca0: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5cb0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5cc0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5cd0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5ce0: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5cf0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5d00: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5d10: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5d20: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5d30: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5d40: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5d50: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5d60: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5d70: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5d80: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5d90: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5da0: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5db0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5dc0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5dd0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5de0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5df0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5e00: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5e10: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5e20: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5e30: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5e40: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5e50: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5e60: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5e70: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5e80: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5e90: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5ea0: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5eb0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5ec0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5ed0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5ee0: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5ef0: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5f00: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5f10: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5f20: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5f30: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5f40: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5f50: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5f60: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5f70: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5f80: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5f90: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5fa0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5fb0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5fc0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5fd0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5fe0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5ff0: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
6000: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
6010: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
6020: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
6030: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
6040: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
6050: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
6060: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
6070: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
6080: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
6090: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
60a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
60f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
6100: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
6110: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
6120: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
6130: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
6140: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6150: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6160: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6170: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
6180: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
6190: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
61a0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
61c0: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
61d0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
61e0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
61f0: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6200: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6210: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6220: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6230: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6240: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6250: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6260: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6270: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
6280: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6290: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
62a0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
62b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
62c0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
62d0: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
62e0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
62f0: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
6300: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
6310: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6320: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
6330: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6340: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6350: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6360: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6370: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6380: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6390: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
63a0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
63b0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
63c0: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
63d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
63e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
63f0: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
6400: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
6410: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
6420: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63   MEM_Int );.  pc
6430: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
6440: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6450: 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a  ode:  Yield P1 *
6460: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6470: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6480: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6490: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
64a0: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
64b0: 59 69 65 6c 64 3a 20 7b 0a 20 20 69 6e 74 20 70  Yield: {.  int p
64c0: 63 44 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28  cDest;.  assert(
64d0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
64e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
64f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
6500: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
6510: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6520: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6530: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6540: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6550: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6560: 74 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  t = pIn1->u.i;. 
6570: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6580: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6590: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
65a0: 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b  ;.  pc = pcDest;
65b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
65c0: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50   Opcode:  Halt P
65d0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
65e0: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
65f0: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
6600: 72 73 6f 72 73 2c 20 46 69 66 6f 73 2c 20 65 74  rsors, Fifos, et
6610: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
6620: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
6630: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
6640: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
6650: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
6660: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
6670: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
6680: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6690: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
66a0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
66b0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
66c0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
66d0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
66e0: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
66f0: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
6700: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
6710: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
6720: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
6730: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
6740: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
6750: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
6760: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
6770: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
6780: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
6790: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
67a0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
67b0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
67c0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
67d0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
67e0: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
67f0: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
6800: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
6810: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
6820: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
6830: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
6840: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
6850: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54   string..**.** T
6860: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
6870: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
6880: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
6890: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
68a0: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
68b0: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
68c0: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
68d0: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
68e0: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
68f0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
6900: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
6910: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
6920: 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70   {.  p->rc = pOp
6930: 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ->p1;.  p->pc = 
6940: 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  pc;.  p->errorAc
6950: 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  tion = pOp->p2;.
6960: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6970: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
6980: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6990: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
69a0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20  Op->p4.z);.  }. 
69b0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
69c0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
69d0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
69e0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
69f0: 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63  E_OK );.  if( rc
6a00: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
6a10: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20  .    p->rc = rc 
6a20: 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
6a30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
6a40: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
6a50: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
6a60: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
6a70: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
6a80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
6a90: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
6aa0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
6ab0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
6ac0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
6ad0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6ae0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
6af0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
6b00: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
6b10: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
6b20: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75  = MEM_Int;.  pOu
6b30: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
6b40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6b50: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
6b60: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6b70: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
6b80: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
6b90: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
6ba0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
6bb0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
6bc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
6bd0: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
6be0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
6bf0: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
6c00: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
6c10: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
6c20: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f   = MEM_Int;.  pO
6c30: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
6c40: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
6c50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6c60: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
6c70: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6c80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6c90: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
6ca0: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
6cb0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
6cc0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
6cd0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
6ce0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6cf0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
6d00: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
6d10: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
6d20: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
6d30: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
6d40: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
6d50: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
6d60: 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  ->r = *pOp->p4.p
6d70: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
6d80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
6d90: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
6da0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
6db0: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
6dc0: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
6dd0: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
6de0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
6df0: 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72  * into an OP_Str
6e00: 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73  ing before it is
6e10: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
6e20: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f  e first time..*/
6e30: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
6e40: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
6e50: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
6e60: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
6e70: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
6e80: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
6e90: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
6ea0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
6eb0: 3e 70 31 20 3d 20 73 74 72 6c 65 6e 28 70 4f 70  >p1 = strlen(pOp
6ec0: 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65  ->p4.z);..#ifnde
6ed0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
6ee0: 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69  F16.  if( encodi
6ef0: 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  ng!=SQLITE_UTF8 
6f00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
6f10: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
6f20: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
6f30: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
6f40: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
6f50: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
6f60: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
6f70: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
6f80: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
6f90: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66  o no_mem;.    if
6fa0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c  ( SQLITE_OK!=sql
6fb0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
6fc0: 72 69 74 65 61 62 6c 65 28 70 4f 75 74 29 20 29  riteable(pOut) )
6fd0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
6fe0: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
6ff0: 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  = 0;.    pOut->f
7000: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74  lags |= MEM_Stat
7010: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
7020: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b  ags &= ~MEM_Dyn;
7030: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
7040: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
7050: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7060: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
7070: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
7080: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
7090: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
70a0: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
70b0: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
70c0: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 20 20   = pOut->n;.    
70d0: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
70e0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
70f0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
7100: 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
7110: 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 55 50 44  g;.    }.    UPD
7120: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7130: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
7140: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  k;.  }.#endif.  
7150: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
7160: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
7170: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
7180: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7190: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
71a0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
71b0: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
71c0: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
71d0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
71e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
71f0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
7200: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
7210: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
7220: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
7230: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
7240: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
7250: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7260: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7270: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7280: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7290: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
72a0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
72b0: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
72c0: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
72d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
72e0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
72f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
7300: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7310: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7320: 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20  code: Null * P2 
7330: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
7340: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
7350: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7360: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7370: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7380: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7390: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
73a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
73b0: 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 2f 2a 20 4f  LOB_LITERAL./* O
73c0: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
73d0: 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  2 * P4.**.** P4 
73e0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
73f0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
7400: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
7410: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
7420: 65 67 69 73 74 65 72 20 50 32 2e 20 54 68 69 73  egister P2. This
7430: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
7440: 6e 6f 74 20 63 6f 64 65 64 20 64 69 72 65 63 74  not coded direct
7450: 6c 79 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d  ly.** by the com
7460: 70 69 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20  piler. Instead, 
7470: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79  the compiler lay
7480: 65 72 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20  er specifies.** 
7490: 61 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70  an OP_HexBlob op
74a0: 63 6f 64 65 2c 20 77 69 74 68 20 74 68 65 20 68  code, with the h
74b0: 65 78 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ex string repres
74c0: 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  entation of.** t
74d0: 68 65 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54  he blob as P4. T
74e0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
74f0: 61 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20  ansformed to an 
7500: 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66  OP_Blob.** the f
7510: 69 72 73 74 20 74 69 6d 65 20 69 74 20 69 73 20  irst time it is 
7520: 65 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73  executed..*/.cas
7530: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
7540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7550: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7560: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7570: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
7580: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71  X_LENGTH );.  sq
7590: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
75a0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
75b0: 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  .z, pOp->p1, 0, 
75c0: 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  0);.  pOut->enc 
75d0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
75e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
75f0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7600: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
7610: 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
7620: 49 54 45 52 41 4c 20 2a 2f 0a 0a 2f 2a 20 4f 70  ITERAL */../* Op
7630: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
7640: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
7650: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 76 61   The value of va
7660: 72 69 61 62 6c 65 20 50 31 20 69 73 20 77 72 69  riable P1 is wri
7670: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7680: 65 72 20 50 32 2e 20 41 20 76 61 72 69 61 62 6c  er P2. A variabl
7690: 65 20 69 73 0a 2a 2a 20 61 6e 20 75 6e 6b 6e 6f  e is.** an unkno
76a0: 77 6e 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  wn in the origin
76b0: 61 6c 20 53 51 4c 20 73 74 72 69 6e 67 20 61 73  al SQL string as
76c0: 20 68 61 6e 64 65 64 20 74 6f 20 73 71 6c 69 74   handed to sqlit
76d0: 65 33 5f 63 6f 6d 70 69 6c 65 28 29 2e 0a 2a 2a  e3_compile()..**
76e0: 20 41 6e 79 20 6f 63 63 75 72 72 65 6e 63 65 20   Any occurrence 
76f0: 6f 66 20 74 68 65 20 27 3f 27 20 63 68 61 72 61  of the '?' chara
7700: 63 74 65 72 20 69 6e 20 74 68 65 20 6f 72 69 67  cter in the orig
7710: 69 6e 61 6c 20 53 51 4c 20 69 73 20 63 6f 6e 73  inal SQL is cons
7720: 69 64 65 72 65 64 0a 2a 2a 20 61 20 76 61 72 69  idered.** a vari
7730: 61 62 6c 65 2e 20 20 56 61 72 69 61 62 6c 65 73  able.  Variables
7740: 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 72 69   in the SQL stri
7750: 6e 67 20 61 72 65 20 6e 75 6d 62 65 72 20 66 72  ng are number fr
7760: 6f 6d 20 6c 65 66 74 20 74 6f 0a 2a 2a 20 72 69  om left to.** ri
7770: 67 68 74 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ght beginning wi
7780: 74 68 20 31 2e 20 20 54 68 65 20 76 61 6c 75 65  th 1.  The value
7790: 73 20 6f 66 20 76 61 72 69 61 62 6c 65 73 20 61  s of variables a
77a0: 72 65 20 73 65 74 20 75 73 69 6e 67 20 74 68 65  re set using the
77b0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  .** sqlite3_bind
77c0: 28 29 20 41 50 49 2e 0a 2a 2f 0a 63 61 73 65 20  () API..*/.case 
77d0: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
77e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
77f0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7800: 20 69 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e 70 31   int j = pOp->p1
7810: 20 2d 20 31 3b 0a 20 20 4d 65 6d 20 2a 70 56 61   - 1;.  Mem *pVa
7820: 72 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3e 3d  r;.  assert( j>=
7830: 30 20 26 26 20 6a 3c 70 2d 3e 6e 56 61 72 20 29  0 && j<p->nVar )
7840: 3b 0a 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  ;..  pVar = &p->
7850: 61 56 61 72 5b 6a 5d 3b 0a 20 20 69 66 28 20 73  aVar[j];.  if( s
7860: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
7870: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
7880: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7890: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
78a0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
78b0: 4f 75 74 2c 20 26 70 2d 3e 61 56 61 72 5b 6a 5d  Out, &p->aVar[j]
78c0: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
78d0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
78e0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
78f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7900: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
7910: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
7920: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
7930: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
7940: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
7950: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
7960: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
7970: 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72  s P1..P1+P1-1 ar
7980: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
7990: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
79a0: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
79b0: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
79c0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
79d0: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
79e0: 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65  overlap..*/.case
79f0: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68   OP_Move: {.  ch
7a00: 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 69  ar *zMalloc;.  i
7a10: 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  nt n = pOp->p3;.
7a20: 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
7a30: 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20 70  p1;.  int p2 = p
7a40: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
7a50: 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
7a60: 74 28 20 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  t( p1>0 );.  ass
7a70: 65 72 74 28 20 70 31 2b 6e 3c 70 2d 3e 6e 4d 65  ert( p1+n<p->nMe
7a80: 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70  m );.  pIn1 = &p
7a90: 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 61 73  ->aMem[p1];.  as
7aa0: 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
7ab0: 61 73 73 65 72 74 28 20 70 32 2b 6e 3c 70 2d 3e  assert( p2+n<p->
7ac0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
7ad0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20   &p->aMem[p2];. 
7ae0: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
7af0: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
7b00: 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b  .  while( n-- ){
7b10: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
7b20: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
7b30: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
7b40: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
7b50: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
7b60: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e  , pIn1);.    pIn
7b70: 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61  1->zMalloc = zMa
7b80: 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54  lloc;.    REGIST
7b90: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
7ba0: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
7bb0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
7bc0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
7bd0: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
7be0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7bf0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
7c00: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
7c10: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
7c20: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
7c30: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
7c40: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
7c50: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
7c60: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
7c70: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
7c80: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
7c90: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
7ca0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
7cb0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
7cc0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
7cd0: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e  rt( pOp->p1<=p->
7ce0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d  nMem );.  pIn1 =
7cf0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
7d00: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  1];.  assert( pO
7d10: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
7d20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
7d30: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
7d40: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
7d50: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
7d60: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
7d70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
7d80: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
7d90: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
7da0: 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  .  Deephemeraliz
7db0: 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  e(pOut);.  REGIS
7dc0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7dd0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
7de0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7df0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
7e00: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
7e10: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
7e20: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
7e30: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
7e40: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
7e50: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
7e60: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
7e70: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
7e80: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
7e90: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
7ea0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
7eb0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
7ec0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
7ed0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
7ee0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
7ef0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
7f00: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
7f10: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
7f20: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
7f30: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
7f40: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
7f50: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
7f60: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
7f70: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
7f80: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
7f90: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
7fa0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
7fb0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
7fc0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
7fd0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
7fe0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 0a 20  se OP_SCopy: {. 
7ff0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8000: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8010: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
8020: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d   );.  pIn1 = &p-
8030: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
8040: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8050: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
8060: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8070: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
8080: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
8090: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
80a0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
80b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
80c0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
80d0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
80e0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
80f0: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
8100: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8110: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8120: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8130: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
8140: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
8150: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
8160: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
8170: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
8180: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
8190: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
81a0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
81b0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
81c0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
81d0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
81e0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
81f0: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
8200: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
8210: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
8220: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
8230: 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61  to the top P1 va
8240: 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75  lues as the resu
8250: 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61  lt.** row..*/.ca
8260: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
8270: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
8280: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
8290: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
82a0: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
82b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
82c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
82d0: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70  p->p1+pOp->p2<=p
82e0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a 20 20 2f 2a 20  ->nMem );..  /* 
82f0: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
8300: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
8310: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
8320: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
8330: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
8340: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
8350: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
8360: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
8370: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
8380: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
8390: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
83a0: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
83b0: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
83c0: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
83d0: 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a  as side effect..
83e0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
83f0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 70  >pResultSet = &p
8400: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
8410: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
8420: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
8430: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8440: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
8450: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65  m[i]);.    store
8460: 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69  TypeInfo(&pMem[i
8470: 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
8480: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8490: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
84a0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
84b0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
84c0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
84d0: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
84e0: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
84f0: 70 2d 3e 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b 0a  p->nCallback++;.
8500: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
8510: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
8520: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
8530: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
8540: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
8550: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
8560: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
8570: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
8580: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
8590: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
85a0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
85b0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
85c0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
85d0: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
85e0: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
85f0: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
8600: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
8610: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
8620: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
8630: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
8640: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
8650: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
8660: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
8670: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
8680: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
8690: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
86a0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
86b0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
86c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
86d0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
86e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
86f0: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
8700: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
8710: 74 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  te;..  assert( p
8720: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
8730: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
8740: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
8750: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
8760: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8770: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
8780: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 45    break;.  }.  E
8790: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
87a0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
87b0: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
87c0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
87d0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
87e0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
87f0: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
8800: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
8810: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
8820: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
8830: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
8840: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
8850: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
8860: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
8870: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
8880: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
8890: 20 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d   nByte+2, pOut==
88a0: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
88b0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
88c0: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
88d0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
88e0: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
88f0: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
8900: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
8910: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
8920: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
8930: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30  ut->z[nByte] = 0
8940: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
8950: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
8960: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
8970: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
8980: 20 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e   nByte;.  pOut->
8990: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
89a0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
89b0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
89c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
89d0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
89e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74   * *.**.** Add t
89f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
8a00: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
8a10: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8a20: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
8a30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
8a40: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
8a50: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
8a60: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
8a70: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
8a80: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
8a90: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
8aa0: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
8ab0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
8ac0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
8ad0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8ae0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
8af0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8b00: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8b10: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
8b20: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
8b30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8b40: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
8b50: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
8b60: 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63   *.**.** Subtrac
8b70: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
8b80: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
8b90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8ba0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
8bb0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
8bc0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
8bd0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
8be0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
8bf0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
8c00: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
8c10: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
8c20: 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20   *.**.** Divide 
8c30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8c40: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
8c50: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8c60: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
8c70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8c80: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
8c90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8ca0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 69 73 20  gister P2.** is 
8cb0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
8cc0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8cd0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
8ce0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
8cf0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8d00: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
8d10: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
8d20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
8d30: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
8d40: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
8d50: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
8d60: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
8d70: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
8d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
8d90: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
8da0: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
8db0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
8dc0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
8dd0: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
8de0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
8df0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
8e00: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
8e10: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
8e20: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8e40: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
8e50: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
8e60: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
8e70: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
8e80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8e90: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
8ea0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
8eb0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
8ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8ed0: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
8ee0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
8ef0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8f10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
8f20: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
8f30: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
8f40: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
8f50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8f60: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
8f70: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66   out3 */.  int f
8f80: 6c 61 67 73 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  lags;.  applyNum
8f90: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
8fa0: 31 29 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  1);.  applyNumer
8fb0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29  icAffinity(pIn2)
8fc0: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
8fd0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
8fe0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
8ff0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
9000: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9010: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9020: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ull;.  if( (pIn1
9030: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e  ->flags & pIn2->
9040: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
9050: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  ==MEM_Int ){.   
9060: 20 69 36 34 20 61 2c 20 62 3b 0a 20 20 20 20 61   i64 a, b;.    a
9070: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
9080: 20 20 62 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b    b = pIn2->u.i;
9090: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
90a0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
90b0: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
90c0: 20 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20         b += a;  
90d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
90e0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
90f0: 63 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20  ct:    b -= a;  
9100: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9110: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
9120: 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20  ly:    b *= a;  
9130: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9140: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9150: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9160: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  a==0 ) goto arit
9170: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9180: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9190: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
91a0: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
91b0: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
91c0: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
91d0: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
91e0: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
91f0: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9200: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9210: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9220: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9230: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9240: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9250: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9260: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9270: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9280: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9290: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
92a0: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
92b0: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
92c0: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
92d0: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
92e0: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
92f0: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
9300: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
9310: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
9320: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d          if( a==-
9330: 31 20 26 26 20 62 3d 3d 53 4d 41 4c 4c 45 53 54  1 && b==SMALLEST
9340: 5f 49 4e 54 36 34 20 29 20 61 20 3d 20 31 3b 0a  _INT64 ) a = 1;.
9350: 20 20 20 20 20 20 20 20 62 20 2f 3d 20 61 3b 0a          b /= a;.
9360: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9370: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
9380: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
9390: 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f 20  if( a==0 ) goto 
93a0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
93b0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
93c0: 20 20 20 69 66 28 20 61 3d 3d 2d 31 20 29 20 61     if( a==-1 ) a
93d0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20   = 1;.        b 
93e0: 25 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72  %= a;.        br
93f0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9400: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
9410: 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65 74   = b;.    MemSet
9420: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
9430: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
9440: 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 61 2c 20  {.    double a, 
9450: 62 3b 0a 20 20 20 20 61 20 3d 20 73 71 6c 69 74  b;.    a = sqlit
9460: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9470: 70 49 6e 31 29 3b 0a 20 20 20 20 62 20 3d 20 73  pIn1);.    b = s
9480: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
9490: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
94a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
94b0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
94c0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
94d0: 20 62 20 2b 3d 20 61 3b 20 20 20 20 20 20 20 62   b += a;       b
94e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
94f0: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
9500: 20 62 20 2d 3d 20 61 3b 20 20 20 20 20 20 20 62   b -= a;       b
9510: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9520: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
9530: 20 62 20 2a 3d 20 61 3b 20 20 20 20 20 20 20 62   b *= a;       b
9540: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9550: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
9560: 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30 2e 30        if( a==0.0
9570: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9580: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9590: 6c 3b 0a 20 20 20 20 20 20 20 20 62 20 2f 3d 20  l;.        b /= 
95a0: 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  a;.        break
95b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
95c0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
95d0: 20 20 20 69 36 34 20 69 61 20 3d 20 28 69 36 34     i64 ia = (i64
95e0: 29 61 3b 0a 20 20 20 20 20 20 20 20 69 36 34 20  )a;.        i64 
95f0: 69 62 20 3d 20 28 69 36 34 29 62 3b 0a 20 20 20  ib = (i64)b;.   
9600: 20 20 20 20 20 69 66 28 20 69 61 3d 3d 30 20 29       if( ia==0 )
9610: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9620: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9630: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 61 3d  .        if( ia=
9640: 3d 2d 31 20 29 20 69 61 20 3d 20 31 3b 0a 20 20  =-1 ) ia = 1;.  
9650: 20 20 20 20 20 20 62 20 3d 20 69 62 20 25 20 69        b = ib % i
9660: 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  a;.        break
9670: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9680: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
9690: 73 4e 61 4e 28 62 29 20 29 7b 0a 20 20 20 20 20  sNaN(b) ){.     
96a0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
96b0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
96c0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
96d0: 3e 72 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d 53  >r = b;.    MemS
96e0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
96f0: 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20   MEM_Real);.    
9700: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
9710: 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
9720: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
9730: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f  tegerAffinity(pO
9740: 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ut);.    }.  }. 
9750: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
9760: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9770: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
9780: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
9790: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
97a0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
97b0: 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  q * * P4.**.** P
97c0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
97d0: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
97e0: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
97f0: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
9800: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
9810: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
9820: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
9830: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
9840: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
9850: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
9860: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
9870: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
9880: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
9890: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
98a0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  nctions..**.** T
98b0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
98c0: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
98d0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
98e0: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
98f0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
9900: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
9910: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
9920: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
9930: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
9940: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f  e.** publicly, o
9950: 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63  nly to user func
9960: 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e  tions defined in
9970: 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65   func.c..*/.case
9980: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
9990: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
99a0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
99b0: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
99c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
99d0: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
99e0: 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  P5.**.** Invoke 
99f0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
9a00: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
9a10: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
9a20: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
9a30: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
9a40: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
9a50: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
9a60: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
9a70: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
9a80: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
9a90: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
9aa0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
9ab0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
9ac0: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
9ad0: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
9ae0: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
9af0: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
9b00: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
9b10: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
9b20: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
9b30: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
9b40: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
9b50: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
9b60: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
9b70: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
9b80: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
9b90: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
9ba0: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
9bb0: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
9bc0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
9bd0: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
9be0: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
9bf0: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
9c00: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
9c10: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
9c20: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
9c30: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
9c40: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
9c50: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
9c60: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
9c70: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
9c80: 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65  See also: AggSte
9c90: 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a  p and AggFinal.*
9ca0: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
9cb0: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
9cc0: 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71   Mem *pArg;.  sq
9cd0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
9ce0: 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
9cf0: 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e  ue **apVal;.  in
9d00: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 0a  t n = pOp->p5;..
9d10: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
9d20: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
9d30: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a  Val || n==0 );..
9d40: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
9d50: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
9d60: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
9d70: 65 6d 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  em) );.  assert(
9d80: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
9d90: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
9da0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
9db0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
9dc0: 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p2];.  for(i=0;
9dd0: 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b   i<n; i++, pArg+
9de0: 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d  +){.    apVal[i]
9df0: 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 74 6f   = pArg;.    sto
9e00: 72 65 54 79 70 65 49 6e 66 6f 28 70 41 72 67 2c  reTypeInfo(pArg,
9e10: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
9e20: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9e30: 4f 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20  Op->p2, pArg);. 
9e40: 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
9e50: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
9e60: 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34  NCDEF || pOp->p4
9e70: 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e  type==P4_VDBEFUN
9e80: 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  C );.  if( pOp->
9e90: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
9ea0: 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46  EF ){.    ctx.pF
9eb0: 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
9ec0: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64  unc;.    ctx.pVd
9ed0: 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65  beFunc = 0;.  }e
9ee0: 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64  lse{.    ctx.pVd
9ef0: 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75  beFunc = (VdbeFu
9f00: 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62  nc*)pOp->p4.pVdb
9f10: 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70  eFunc;.    ctx.p
9f20: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
9f30: 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d  Func->pFunc;.  }
9f40: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
9f50: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
9f60: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
9f70: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
9f80: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e 73  Op->p3];.  ctx.s
9f90: 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
9fa0: 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20  l;.  ctx.s.db = 
9fb0: 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c  db;.  ctx.s.xDel
9fc0: 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
9fd0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a  alloc = 0;..  /*
9fe0: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
9ff0: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
a000: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
a010: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
a020: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
a030: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
a040: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
a050: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
a060: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
a070: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
a080: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
a090: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
a0a0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
a0b0: 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70  emMove(&ctx.s, p
a0c0: 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Out);.  MemSetTy
a0d0: 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d  peFlag(&ctx.s, M
a0e0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78  EM_Null);..  ctx
a0f0: 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
a100: 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
a110: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
a120: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
a130: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
a140: 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
a150: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
a160: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
a170: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
a180: 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
a190: 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
a1a0: 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
a1b0: 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
a1c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
a1d0: 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
a1e0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a1f0: 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a 63 74  o_misuse;.  (*ct
a200: 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28  x.pFunc->xFunc)(
a210: 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
a220: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
a230: 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
a240: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a250: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
a260: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
a270: 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
a280: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
a290: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
a2a0: 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20   /* Even though 
a2b0: 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66  a malloc() has f
a2c0: 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65  ailed, the imple
a2d0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
a2e0: 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e  .    ** user fun
a2f0: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
a300: 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33  alled an sqlite3
a310: 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75  _result_XXX() fu
a320: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f  nction.    ** to
a330: 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e   return a value.
a340: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
a350: 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79  all releases any
a360: 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a   resources.    *
a370: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
a380: 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a  h such a value..
a390: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e 6f      **.    ** No
a3a0: 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52 65 6c  te: Maybe MemRel
a3b0: 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20 62 65  ease() should be
a3c0: 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c 69 74   called if sqlit
a3d0: 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20 20 20  e3SafetyOn().   
a3e0: 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f 20 28   ** fails also (
a3f0: 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74 61 74  the if(...) stat
a400: 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20 42 75  ement above). Bu
a410: 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72 65 0a  t if people are.
a420: 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e 67 20      ** misusing 
a430: 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68 61 76  sqlite, they hav
a440: 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c 65 6d  e bigger problem
a450: 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65 64 20  s than a leaked 
a460: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
a470: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a480: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
a490: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
a4a0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61  ;.  }..  /* If a
a4b0: 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ny auxiliary dat
a4c0: 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  a functions have
a4d0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20   been called by 
a4e0: 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74 69  this user functi
a4f0: 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61  on,.  ** immedia
a500: 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65  tely call the de
a510: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79  structor for any
a520: 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75   non-static valu
a530: 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  es..  */.  if( c
a540: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  tx.pVdbeFunc ){.
a550: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
a560: 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74 78  eleteAuxData(ctx
a570: 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d  .pVdbeFunc, pOp-
a580: 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  >p1);.    pOp->p
a590: 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74  4.pVdbeFunc = ct
a5a0: 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  x.pVdbeFunc;.   
a5b0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
a5c0: 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a  4_VDBEFUNC;.  }.
a5d0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
a5e0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
a5f0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
a600: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
a610: 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
a620: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
a630: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
a640: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
a650: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
a660: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
a670: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
a680: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
a690: 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
a6a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  the function int
a6b0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  o register P3 */
a6c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
a6d0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74  angeEncoding(&ct
a6e0: 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  x.s, encoding);.
a6f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a700: 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e  Move(pOut, &ctx.
a710: 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  s);.  if( sqlite
a720: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
a730: 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Out) ){.    goto
a740: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
a750: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
a760: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
a770: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
a780: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
a790: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a7a0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
a7b0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
a7c0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
a7d0: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
a7e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
a7f0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
a800: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a810: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a820: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
a830: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
a840: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a850: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
a860: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
a870: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
a880: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
a890: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
a8a0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
a8b0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
a8c0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a8d0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a8e0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a8f0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a900: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a910: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
a920: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
a930: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
a940: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
a950: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
a960: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
a970: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
a980: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
a990: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 65  nteger in regise
a9a0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
a9b0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a9c0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a9d0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
a9e0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
a9f0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
aa00: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
aa10: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
aa20: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
aa30: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
aa40: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
aa50: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
aa60: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
aa70: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
aa80: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
aa90: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
aaa0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
aab0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
aac0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
aad0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
aae0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
aaf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
ab00: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
ab10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ab20: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
ab30: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ab40: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
ab50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ab60: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
ab70: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ab80: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
ab90: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
aba0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
abb0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
abc0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
abd0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
abe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
abf0: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
ac00: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ac10: 2f 0a 20 20 69 36 34 20 61 2c 20 62 3b 0a 0a 20  /.  i64 a, b;.. 
ac20: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ac30: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
ac40: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
ac50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ac60: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
ac70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
ac80: 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   a = sqlite3Vdbe
ac90: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
aca0: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62    b = sqlite3Vdb
acb0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
acc0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
acd0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
ace0: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
acf0: 20 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62     a &= b;     b
ad00: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
ad10: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61  P_BitOr:       a
ad20: 20 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   |= b;     break
ad30: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68  ;.    case OP_Sh
ad40: 69 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d  iftLeft:   a <<=
ad50: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
ad60: 20 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65    default:  asse
ad70: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
ad80: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 29  =OP_ShiftRight )
ad90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
ada0: 20 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d             a >>=
adb0: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
adc0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
add0: 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  a;.  MemSetTypeF
ade0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
adf0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
ae00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
ae10: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
ae20: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
ae30: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
ae40: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae50: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
ae60: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
ae70: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
ae80: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
ae90: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
aea0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
aeb0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
aec0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
aed0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
aee0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
aef0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
af00: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
af10: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
af20: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
af30: 46 6f 72 63 65 49 6e 74 20 50 31 20 50 32 20 50  ForceInt P1 P2 P
af40: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  3 * *.**.** Conv
af50: 65 72 74 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ert value in reg
af60: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 61 6e  ister P1 into an
af70: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
af80: 65 20 76 61 6c 75 65 20 0a 2a 2a 20 69 6e 20 50  e value .** in P
af90: 31 20 69 73 20 6e 6f 74 20 6e 75 6d 65 72 69 63  1 is not numeric
afa0: 20 28 6d 65 61 6e 69 6e 67 20 74 68 61 74 20 69   (meaning that i
afb0: 73 20 69 73 20 61 20 4e 55 4c 4c 20 6f 72 20 61  s is a NULL or a
afc0: 20 73 74 72 69 6e 67 20 74 68 61 74 0a 2a 2a 20   string that.** 
afd0: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69  does not look li
afe0: 6b 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  ke an integer or
aff0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
b000: 6e 75 6d 62 65 72 29 20 74 68 65 6e 0a 2a 2a 20  number) then.** 
b010: 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20  jump to P2.  If 
b020: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 20  the value in P1 
b030: 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 0a  is numeric then.
b040: 2a 2a 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  ** convert it in
b050: 74 6f 20 74 68 65 20 6c 65 61 73 74 20 69 6e 74  to the least int
b060: 65 67 65 72 20 74 68 61 74 20 69 73 20 67 72 65  eger that is gre
b070: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
b080: 61 6c 20 74 6f 20 69 74 73 0a 2a 2a 20 63 75 72  al to its.** cur
b090: 72 65 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33  rent value if P3
b0a0: 3d 3d 30 2c 20 6f 72 20 74 6f 20 74 68 65 20 6c  ==0, or to the l
b0b0: 65 61 73 74 20 69 6e 74 65 67 65 72 20 74 68 61  east integer tha
b0c0: 74 20 69 73 20 73 74 72 69 63 74 6c 79 0a 2a 2a  t is strictly.**
b0d0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 69 74   greater than it
b0e0: 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
b0f0: 69 66 20 50 33 3d 3d 31 2e 0a 2a 2f 0a 63 61 73  if P3==1..*/.cas
b100: 65 20 4f 50 5f 46 6f 72 63 65 49 6e 74 3a 20 7b  e OP_ForceInt: {
b110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
b120: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 36  ump, in1 */.  i6
b130: 34 20 76 3b 0a 20 20 61 70 70 6c 79 41 66 66 69  4 v;.  applyAffi
b140: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
b150: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
b160: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
b170: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn1->flags & (
b180: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
b190: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  ))==0 ){.    pc 
b1a0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
b1b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b1c0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
b1d0: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
b1e0: 20 76 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 20 2b   v = pIn1->u.i +
b1f0: 20 28 70 4f 70 2d 3e 70 33 21 3d 30 29 3b 0a 20   (pOp->p3!=0);. 
b200: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
b210: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
b220: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
b230: 20 20 76 20 3d 20 28 73 71 6c 69 74 65 33 5f 69    v = (sqlite3_i
b240: 6e 74 36 34 29 70 49 6e 31 2d 3e 72 3b 0a 20 20  nt64)pIn1->r;.  
b250: 20 20 69 66 28 20 70 49 6e 31 2d 3e 72 3e 28 64    if( pIn1->r>(d
b260: 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b 0a 20  ouble)v ) v++;. 
b270: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 26     if( pOp->p3 &
b280: 26 20 70 49 6e 31 2d 3e 72 3d 3d 28 64 6f 75 62  & pIn1->r==(doub
b290: 6c 65 29 76 20 29 20 76 2b 2b 3b 0a 20 20 7d 0a  le)v ) v++;.  }.
b2a0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 76 3b    pIn1->u.i = v;
b2b0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b2c0: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
b2d0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b2e0: 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49   Opcode: MustBeI
b2f0: 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
b300: 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  * .** Force the 
b310: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b320: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
b330: 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76  teger.  If the v
b340: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
b350: 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
b360: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  and cannot be co
b370: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
b380: 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f  integer.** witho
b390: 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68  ut data loss, th
b3a0: 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
b3b0: 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66  ely to P2, or if
b3c0: 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20   P2==0.** raise 
b3d0: 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  an SQLITE_MISMAT
b3e0: 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f  CH exception..*/
b3f0: 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49  .case OP_MustBeI
b400: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
b410: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
b420: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
b430: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
b440: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
b450: 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ing);.  if( (pIn
b460: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
b470: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  nt)==0 ){.    if
b480: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
b490: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
b4a0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
b4b0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
b4c0: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
b4d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d  else{.      pc =
b4e0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
b4f0: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
b500: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b510: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
b520: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
b530: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
b540: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
b550: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
b560: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
b570: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
b580: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
b590: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
b5a0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
b5b0: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
b5c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
b5d0: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
b5e0: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
b5f0: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
b600: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
b610: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
b620: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
b630: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
b640: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
b650: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
b660: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
b670: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
b680: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
b690: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b6b0: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49   in1 */.  if( pI
b6c0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
b6d0: 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Int ){.    sqlit
b6e0: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
b6f0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
b700: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
b710: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
b720: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65  ./* Opcode: ToTe
b730: 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  xt P1 * * * *.**
b740: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
b750: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b760: 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a  P1 to be text..*
b770: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
b780: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
b790: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
b7a0: 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  g using the.** e
b7b0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69  quivalent of pri
b7c0: 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c  ntf().  Blob val
b7d0: 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65  ues are unchange
b7e0: 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74  d and.** are aft
b7f0: 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69  erwards simply i
b800: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
b810: 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  xt..**.** A NULL
b820: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
b830: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
b840: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
b850: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
b860: 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20   OP_ToText: {   
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b880: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
b890: 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  TEXT, in1 */.  i
b8a0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
b8b0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
b8c0: 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d  k;.  assert( MEM
b8d0: 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e  _Str==(MEM_Blob>
b8e0: 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  >3) );.  pIn1->f
b8f0: 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66  lags |= (pIn1->f
b900: 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e  lags&MEM_Blob)>>
b910: 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  3;.  applyAffini
b920: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
b930: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
b940: 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  ng);.  rc = Expa
b950: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
b960: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
b970: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c  ags & MEM_Str ||
b980: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
b990: 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  d );.  pIn1->fla
b9a0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c  gs &= ~(MEM_Int|
b9b0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f  MEM_Real|MEM_Blo
b9c0: 62 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  b);.  UPDATE_MAX
b9d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
b9e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b9f0: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
ba00: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
ba10: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
ba20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
ba30: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
ba40: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
ba50: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
ba60: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
ba70: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
ba80: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
ba90: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
baa0: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
bab0: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
bac0: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
bad0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
bae0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
baf0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
bb00: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
bb10: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
bb20: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
bb30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bb40: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
bb50: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e  in1 */.  if( pIn
bb60: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
bb70: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
bb80: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
bb90: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
bba0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
bbb0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
bbc0: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
bbd0: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
bbe0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
bbf0: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
bc00: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
bc10: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
bc20: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c  lag(pIn1, MEM_Bl
bc30: 6f 62 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ob);.  UPDATE_MA
bc40: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
bc50: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
bc60: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
bc70: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
bc80: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
bc90: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bca0: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
bcb0: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
bcc0: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
bcd0: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
bce0: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
bcf0: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
bd00: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
bd10: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
bd20: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
bd30: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
bd40: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
bd50: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
bd60: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
bd70: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
bd80: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
bd90: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
bda0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
bdb0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
bdc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
bdd0: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
bde0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bdf0: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
be00: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  IC, in1 */.  if(
be10: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
be20: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e  (MEM_Null|MEM_In
be30: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
be40: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
be50: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
be60: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
be70: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
be80: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
be90: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
bea0: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
beb0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bec0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bed0: 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67 65   P1 be an intege
bee0: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
bef0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
bf00: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
bf10: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
bf20: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
bf30: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
bf40: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
bf50: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
bf60: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
bf70: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
bf80: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
bf90: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
bfa0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
bfb0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
bfc0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
bfd0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
bfe0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
bff0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c000: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
c010: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
c020: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c030: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
c040: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c050: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c060: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
c070: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
c080: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
c090: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
c0a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c0b0: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
c0c0: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
c0d0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c0e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c0f0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
c100: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
c110: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
c120: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
c130: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
c140: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
c150: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c160: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c170: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c180: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
c190: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c1a0: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
c1b0: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
c1c0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c1d0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c1e0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c1f0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c200: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c210: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c220: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c230: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
c240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c250: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
c260: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
c270: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c280: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
c290: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
c2a0: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
c2b0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
c2c0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c2d0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
c2e0: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
c2f0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
c300: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
c310: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c320: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
c330: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
c340: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
c350: 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a  ress P2.  .**.**
c360: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
c370: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
c380: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
c390: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
c3a0: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
c3b0: 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
c3c0: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
c3d0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
c3e0: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
c3f0: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
c400: 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  u if either oper
c410: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
c420: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
c430: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
c440: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
c450: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
c460: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
c470: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
c480: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
c490: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
c4a0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
c4b0: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
c4c0: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
c4d0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
c4e0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
c4f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
c500: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
c510: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
c520: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
c530: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
c540: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
c550: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
c560: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
c570: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
c580: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
c590: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
c5a0: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
c5b0: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
c5c0: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
c5d0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
c5e0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
c5f0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
c600: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
c610: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
c620: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
c630: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
c640: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
c650: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
c660: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
c670: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
c680: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
c690: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
c6a0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
c6b0: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
c6c0: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
c6d0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
c6e0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
c6f0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
c700: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
c710: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
c720: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
c730: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
c740: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
c750: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
c760: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
c770: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
c780: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
c790: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
c7a0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
c7b0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
c7c0: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
c7d0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
c7e0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
c7f0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
c800: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
c810: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
c820: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
c830: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
c840: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
c850: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
c860: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
c870: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
c880: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
c890: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
c8a0: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
c8b0: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
c8c0: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
c8d0: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
c8e0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
c8f0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
c900: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
c910: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
c920: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
c930: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
c940: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
c950: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
c960: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
c970: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
c980: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
c990: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
c9a0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
c9b0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
c9c0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
c9d0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
c9e0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
c9f0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ca00: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
ca10: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
ca20: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
ca30: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
ca40: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ca50: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ca60: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
ca70: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
ca80: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
ca90: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
caa0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
cab0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
cac0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
cad0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
cae0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
caf0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
cb00: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
cb10: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
cb20: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
cb30: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
cb40: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
cb50: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
cb60: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
cb70: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
cb80: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
cb90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
cba0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
cbb0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
cbc0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
cbd0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
cbe0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
cbf0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
cc00: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
cc10: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
cc20: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
cc30: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
cc40: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
cc50: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
cc60: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
cc70: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
cc80: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
cc90: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
cca0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
ccb0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
ccc0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
ccd0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
cce0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ccf0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
cd00: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
cd10: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
cd20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
cd30: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
cd40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd50: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
cd60: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
cd70: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
cd80: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cd90: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
cda0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
cdb0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
cdc0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cdd0: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
cde0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
cdf0: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
ce00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ce10: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
ce20: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ce30: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
ce40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ce50: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
ce60: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
ce70: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ce80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
ce90: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
cea0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
ceb0: 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
cec0: 61 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20  ar affinity;..  
ced0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
cee0: 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  ags|pIn3->flags;
cef0: 0a 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d 45  ..  if( flags&ME
cf00: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
cf10: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
cf20: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
cf30: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
cf40: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  ways NULL..    *
cf50: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
cf60: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
cf70: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
cf80: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a   is set..    */.
cf90: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
cfa0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
cfb0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   ){.      pOut =
cfc0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
cfd0: 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74  2];.      MemSet
cfe0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
cff0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
d000: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d010: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
d020: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
d030: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
d040: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
d050: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
d060: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
d070: 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69  k;.  }..  affini
d080: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
d090: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
d0a0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
d0b0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d0c0: 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69  ity(pIn1, affini
d0d0: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
d0e0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d0f0: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
d100: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a   encoding);.  }.
d110: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d120: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
d130: 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
d140: 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61  oll==0 );.  Expa
d150: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
d160: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
d170: 3b 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65  ;.  res = sqlite
d180: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
d190: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
d1a0: 70 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68  pColl);.  switch
d1b0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
d1c0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
d1d0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
d1e0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
d1f0: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
d200: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
d210: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d220: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
d230: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
d240: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d250: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
d260: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
d270: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
d280: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
d290: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d2a0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
d2b0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
d2c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
d2d0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
d2e0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
d2f0: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
d300: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
d310: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d320: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d330: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
d340: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
d350: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
d360: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
d370: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
d380: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
d390: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
d3a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
d3b0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
d3c0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
d3d0: 70 65 72 6d 75 61 74 69 6f 6e 20 75 73 65 64 20  permuation used 
d3e0: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
d3f0: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
d400: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
d410: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
d420: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
d430: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
d440: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
d450: 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ext OP_Permutati
d460: 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a  on, OP_Compare,.
d470: 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f  ** OP_Halt, or O
d480: 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79  P_ResultRow.  Ty
d490: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
d4a0: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
d4b0: 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64  d occur.** immed
d4c0: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
d4d0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
d4e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
d4f0: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
d500: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d510: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
d520: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d530: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
d540: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
d550: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d560: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
d570: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
d580: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76  .** Compare to v
d590: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
d5a0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
d5b0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c  reg(P1+P3-1) (al
d5c0: 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41  l this.** one "A
d5d0: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
d5e0: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
d5f0: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
d600: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
d610: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
d620: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
d630: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
d640: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
d650: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
d660: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
d670: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d680: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
d690: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
d6a0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
d6b0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
d6c0: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
d6d0: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
d6e0: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
d6f0: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
d700: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
d710: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
d720: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
d730: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
d740: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
d750: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
d760: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
d770: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
d780: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
d790: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
d7a0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
d7b0: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
d7c0: 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70   {.  int n = pOp
d7d0: 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 69 2c 20 70  ->p3;.  int i, p
d7e0: 31 2c 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  1, p2;.  const K
d7f0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
d800: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
d810: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
d820: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
d830: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
d840: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
d850: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
d860: 20 70 31 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d 20   p1+n-1<p->nMem 
d870: 29 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  );.  p2 = pOp->p
d880: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e  2;.  assert( p2>
d890: 30 20 26 26 20 70 32 2b 6e 2d 31 3c 70 2d 3e 6e  0 && p2+n-1<p->n
d8a0: 4d 65 6d 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  Mem );.  for(i=0
d8b0: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
d8c0: 20 69 6e 74 20 69 64 78 20 3d 20 61 50 65 72 6d   int idx = aPerm
d8d0: 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69  ute ? aPermute[i
d8e0: 5d 20 3a 20 69 3b 0a 20 20 20 20 43 6f 6c 6c 53  ] : i;.    CollS
d8f0: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
d900: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
d910: 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
d920: 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 20 20 69  is term */.    i
d930: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
d940: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
d950: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
d960: 64 65 72 20 2a 2f 0a 20 20 20 20 52 45 47 49 53  der */.    REGIS
d970: 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
d980: 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64  , &p->aMem[p1+id
d990: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
d9a0: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
d9b0: 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  &p->aMem[p2+idx]
d9c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
d9d0: 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
d9e0: 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
d9f0: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
da00: 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
da10: 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
da20: 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
da30: 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
da40: 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d  emCompare(&p->aM
da50: 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e  em[p1+idx], &p->
da60: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
da70: 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
da80: 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
da90: 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
daa0: 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
dab0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
dac0: 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
dad0: 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
dae0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
daf0: 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
db00: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
db10: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
db20: 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
db30: 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
db40: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
db50: 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
db60: 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
db70: 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
db80: 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
db90: 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
dba0: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
dbb0: 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
dbc0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
dbd0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
dbe0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
dbf0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
dc00: 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
dc10: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
dc20: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
dc30: 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
dc40: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
dc50: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
dc60: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d    pc = pOp->p3 -
dc70: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
dc80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
dc90: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
dca0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
dcb0: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
dcc0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dcd0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
dce0: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
dcf0: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
dd00: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
dd10: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
dd20: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
dd30: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
dd40: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
dd50: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
dd60: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
dd70: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
dd80: 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
dd90: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
dda0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
ddb0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ddc0: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
ddd0: 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
dde0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
ddf0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
de00: 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
de10: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
de20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
de30: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
de40: 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
de50: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
de60: 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
de70: 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
de80: 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
de90: 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
dea0: 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
deb0: 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
dec0: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
ded0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
dee0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
def0: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
df00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
df10: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
df20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
df30: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
df40: 2a 2f 0a 20 20 69 6e 74 20 76 31 2c 20 76 32 3b  */.  int v1, v2;
df50: 20 20 20 20 2f 2a 20 30 3d 3d 46 41 4c 53 45 2c      /* 0==FALSE,
df60: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
df70: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
df80: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
df90: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
dfa0: 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
dfb0: 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
dfc0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
dfd0: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
dfe0: 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
dff0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e000: 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
e010: 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
e020: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e030: 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
e040: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
e050: 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
e060: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
e070: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
e080: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
e090: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
e0a0: 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
e0b0: 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
e0c0: 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
e0d0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e0e0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
e0f0: 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
e100: 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
e110: 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
e120: 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
e130: 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28  3+v2];.  }.  if(
e140: 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
e150: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e160: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
e170: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
e180: 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
e190: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e1a0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
e1b0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
e1c0: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
e1d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  * * * *.**.** In
e1e0: 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
e1f0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e200: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
e210: 6c 75 65 2e 20 20 52 65 70 6c 61 63 65 20 69 74  lue.  Replace it
e220: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 63 6f 6d  .** with its com
e230: 70 6c 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  plement.  If the
e240: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e250: 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 20 69 74  er P1 is NULL it
e260: 73 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 75 6e  s value.** is un
e270: 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65  changed..*/.case
e280: 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
e290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e2a0: 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
e2b0: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
e2c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
e2d0: 20 29 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44 6f   ) break;  /* Do
e2e0: 20 6e 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c 4c   nothing to NULL
e2f0: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
e300: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
e310: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
e320: 2e 69 20 3d 20 21 70 49 6e 31 2d 3e 75 2e 69 3b  .i = !pIn1->u.i;
e330: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
e340: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
e350: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e360: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
e370: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
e380: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
e390: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e3a0: 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
e3b0: 67 65 72 2e 20 20 52 65 70 6c 61 63 65 20 69 74  ger.  Replace it
e3c0: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 6f 6e 65  .** with its one
e3d0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s-complement.  I
e3e0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6f  f the value is o
e3f0: 72 69 67 69 6e 61 6c 6c 79 20 4e 55 4c 4c 2c 20  riginally NULL, 
e400: 6c 65 61 76 65 0a 2a 2a 20 69 74 20 75 6e 63 68  leave.** it unch
e410: 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  anged..*/.case O
e420: 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
e430: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e440: 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
e450: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
e460: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e470: 6c 20 29 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44  l ) break;  /* D
e480: 6f 20 6e 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c  o nothing to NUL
e490: 4c 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  Ls */.  sqlite3V
e4a0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
e4b0: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
e4c0: 75 2e 69 20 3d 20 7e 70 49 6e 31 2d 3e 75 2e 69  u.i = ~pIn1->u.i
e4d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
e4e0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
e4f0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
e500: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
e510: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e520: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e530: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e540: 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
e550: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
e560: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
e570: 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
e580: 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
e590: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
e5a0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
e5b0: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
e5c0: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
e5d0: 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ue..*/./* Opcode
e5e0: 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
e5f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
e600: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
e610: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e620: 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
e630: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
e640: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
e650: 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
e660: 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
e670: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
e680: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
e690: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
e6a0: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
e6b0: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ue..*/.case OP_I
e6c0: 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
e6d0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
e6e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
e6f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e700: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
e710: 20 69 6e 74 20 63 3b 0a 20 20 69 66 28 20 70 49   int c;.  if( pI
e720: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e730: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
e740: 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
e750: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
e760: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
e770: 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
e780: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
e790: 70 49 6e 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20  pIn1);.#else.   
e7a0: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
e7b0: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
e7c0: 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
e7d0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
e7e0: 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
e7f0: 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63   !c;.  }.  if( c
e800: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
e810: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
e820: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e830: 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
e840: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
e850: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
e860: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
e870: 20 50 31 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66   P1 is NULL.  If
e880: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 0a 2a   P3 is greater.*
e890: 2a 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  * than zero, the
e8a0: 6e 20 63 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75  n check all valu
e8b0: 65 73 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  es reg(P1), reg(
e8c0: 50 31 2b 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50  P1+1), .** reg(P
e8d0: 31 2b 32 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50  1+2), ..., reg(P
e8e0: 31 2b 50 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65  1+P3-1)..*/.case
e8f0: 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
e900: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e910: 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
e920: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
e930: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  t n = pOp->p3;. 
e940: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
e950: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 31 3e 30  ==0 || pOp->p1>0
e960: 20 29 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 66   );.  do{.    if
e970: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
e980: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
e990: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
e9a0: 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
e9b0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
e9c0: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pIn1++;.  }while
e9d0: 28 20 2d 2d 6e 20 3e 20 30 20 29 3b 0a 20 20 62  ( --n > 0 );.  b
e9e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e9f0: 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
ea00: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  2 * * *.**.** Ju
ea10: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
ea20: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ea30: 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
ea40: 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
ea50: 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
ea60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ea70: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
ea80: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
ea90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
eaa0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
eab0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
eac0: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
ead0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
eae0: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50  etNumColumns * P
eaf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
eb00: 69 73 20 6f 70 63 6f 64 65 20 73 65 74 73 20 74  is opcode sets t
eb10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
eb20: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 63 75 72  umns for the cur
eb30: 73 6f 72 20 6f 70 65 6e 65 64 20 62 79 20 74 68  sor opened by th
eb40: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 69  e.** following i
eb50: 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 50 32  nstruction to P2
eb60: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65  ..**.** An OP_Se
eb70: 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 73 20 6f  tNumColumns is o
eb80: 6e 6c 79 20 75 73 65 66 75 6c 20 69 66 20 69 74  nly useful if it
eb90: 20 6f 63 63 75 72 73 20 69 6d 6d 65 64 69 61 74   occurs immediat
eba0: 65 6c 79 20 62 65 66 6f 72 65 20 0a 2a 2a 20 6f  ely before .** o
ebb0: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
ebc0: 69 6e 67 20 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a  ing opcodes:.**.
ebd0: 2a 2a 20 20 20 20 20 4f 70 65 6e 52 65 61 64 0a  **     OpenRead.
ebe0: 2a 2a 20 20 20 20 20 4f 70 65 6e 57 72 69 74 65  **     OpenWrite
ebf0: 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 50 73 65 75  .**     OpenPseu
ec00: 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  do.**.** If the 
ec10: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
ec20: 20 69 73 20 74 6f 20 62 65 20 65 78 65 63 75 74   is to be execut
ec30: 65 64 20 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed on a cursor, 
ec40: 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63  then.** this opc
ec50: 6f 64 65 20 6d 75 73 74 20 62 65 20 70 72 65 73  ode must be pres
ec60: 65 6e 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ent immediately 
ec70: 62 65 66 6f 72 65 20 74 68 65 20 6f 70 63 6f 64  before the opcod
ec80: 65 20 74 68 61 74 0a 2a 2a 20 6f 70 65 6e 73 20  e that.** opens 
ec90: 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 63  the cursor..*/.c
eca0: 61 73 65 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c  ase OP_SetNumCol
ecb0: 75 6d 6e 73 3a 20 7b 0a 20 20 62 72 65 61 6b 3b  umns: {.  break;
ecc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
ecd0: 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
ece0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  4 *.**.** Interp
ecf0: 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
ed00: 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
ed10: 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
ed20: 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
ed30: 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
ed40: 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
ed50: 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
ed60: 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
ed70: 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
ed80: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ed90: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
eda0: 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
edb0: 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
edc0: 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
edd0: 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
ede0: 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
edf0: 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
ee00: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
ee10: 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
ee20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
ee30: 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
ee40: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
ee50: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
ee60: 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
ee70: 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
ee80: 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
ee90: 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
eea0: 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
eeb0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
eec0: 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
eed0: 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
eee0: 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
eef0: 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  esult..*/.case O
ef00: 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33  P_Column: {.  u3
ef10: 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20  2 payloadSize;  
ef20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
ef30: 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
ef40: 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20  d */.  int p1 = 
ef50: 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20 50 31 20  pOp->p1;  /* P1 
ef60: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
ef70: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 20  ode */.  int p2 
ef80: 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f 2a 20 63  = pOp->p2;  /* c
ef90: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
efa0: 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
efb0: 62 65 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30  beCursor *pC = 0
efc0: 3b 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72  ;/* The VDBE cur
efd0: 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
efe0: 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
eff0: 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
f000: 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
f010: 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
f020: 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
f030: 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
f040: 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
f050: 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
f060: 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
f070: 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
f080: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
f090: 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
f0a0: 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
f0b0: 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
f0c0: 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
f0d0: 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
f0e0: 33 32 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  32 nField;      
f0f0: 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
f100: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
f110: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
f120: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
f130: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
f140: 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
f150: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
f160: 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
f170: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
f180: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
f190: 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
f1a0: 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
f1b0: 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
f1c0: 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
f1d0: 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
f1e0: 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
f1f0: 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
f200: 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
f210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
f220: 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
f230: 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
f240: 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e 66 6c 61  d */..  sMem.fla
f250: 67 73 20 3d 20 30 3b 0a 20 20 73 4d 65 6d 2e 64  gs = 0;.  sMem.d
f260: 62 20 3d 20 30 3b 0a 20 20 73 4d 65 6d 2e 7a 4d  b = 0;.  sMem.zM
f270: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 61 73 73  alloc = 0;.  ass
f280: 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
f290: 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
f2a0: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
f2b0: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
f2c0: 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61  .  pDest = &p->a
f2d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f2e0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f2f0: 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
f300: 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63  ..  /* This bloc
f310: 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61  k sets the varia
f320: 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  ble payloadSize 
f330: 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20  to be the total 
f340: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62  number of.  ** b
f350: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
f360: 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52  rd..  **.  ** zR
f370: 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  ec is set to be 
f380: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
f390: 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
f3a0: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
f3b0: 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d  le..  ** The com
f3c0: 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
f3d0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69  t is always avai
f3e0: 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f  lable for pseudo
f3f0: 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20  -tables.  ** If 
f400: 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  the record is st
f410: 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72  ored in a cursor
f420: 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  , the complete r
f430: 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20  ecord text.  ** 
f440: 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62  might be availab
f450: 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61  le in the  pC->a
f460: 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69  Row cache.  Or i
f470: 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a  t might not be..
f480: 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61    ** If the data
f490: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c   is unavailable,
f4a0: 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f    zRec is set to
f4b0: 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   NULL..  **.  **
f4c0: 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65   We also compute
f4d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f4e0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
f4f0: 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f  cord.  For curso
f500: 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  rs,.  ** the num
f510: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f520: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
f530: 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c  VdbeCursor.nFiel
f540: 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  d element..  */.
f550: 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
f560: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
f570: 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  C!=0 );.#ifndef 
f580: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
f590: 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72  UALTABLE.  asser
f5a0: 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  t( pC->pVtabCurs
f5b0: 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a  or==0 );.#endif.
f5c0: 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
f5d0: 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54  r!=0 ){.    /* T
f5e0: 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
f5f0: 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20  red in a B-Tree 
f600: 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
f610: 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
f620: 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
f630: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
f640: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
f650: 20 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20     zRec = 0;.   
f660: 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
f670: 72 73 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rsor;.    if( pC
f680: 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
f690: 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
f6a0: 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
f6b0: 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
f6c0: 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
f6d0: 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
f6e0: 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  ize = pC->payloa
f6f0: 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65  dSize;.      zRe
f700: 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61  c = (char*)pC->a
f710: 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  Row;.    }else i
f720: 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
f730: 7b 0a 20 20 20 20 20 20 69 36 34 20 70 61 79 6c  {.      i64 payl
f740: 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20  oadSize64;.     
f750: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
f760: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
f770: 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
f780: 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
f790: 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a   payloadSize64;.
f7a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f7b0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
f7c0: 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  aSize(pCrsr, &pa
f7d0: 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
f7e0: 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  }.    nField = p
f7f0: 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  C->nField;.  }el
f800: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
f810: 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
f820: 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65  );.    /* The re
f830: 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65  cord is the sole
f840: 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75   entry of a pseu
f850: 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  do-table */.    
f860: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
f870: 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65  ->nData;.    zRe
f880: 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20  c = pC->pData;. 
f890: 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
f8a0: 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
f8b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61  ;.    assert( pa
f8c0: 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20  yloadSize==0 || 
f8d0: 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e  zRec!=0 );.    n
f8e0: 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
f8f0: 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  ld;.    pCrsr = 
f900: 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  0;.  }..  /* If 
f910: 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30  payloadSize is 0
f920: 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72  , then just stor
f930: 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66  e a NULL */.  if
f940: 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
f950: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
f960: 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
f970: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74  _Null );.    got
f980: 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
f990: 0a 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f  .  }.  if( paylo
f9a0: 61 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69  adSize>db->aLimi
f9b0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
f9c0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
f9d0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
f9e0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
f9f0: 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
fa00: 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
fa10: 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
fa20: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
fa30: 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
fa40: 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
fa50: 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
fa60: 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
fa70: 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
fa80: 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
fa90: 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
faa0: 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
fab0: 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
fac0: 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
fad0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75  ;.  }else{.    u
fae0: 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20  8 *zIdx;        
faf0: 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65  /* Index into he
fb00: 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a  ader */.    u8 *
fb10: 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20  zEndHdr;     /* 
fb20: 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
fb30: 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
fb40: 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 33  header */.    u3
fb50: 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  2 offset;      /
fb60: 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
fb70: 65 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e  e data */.    in
fb80: 74 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f  t szHdrSz;     /
fb90: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
fba0: 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
fbb0: 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
fbc0: 72 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76  rd */.    int av
fbd0: 61 69 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  ail;       /* Nu
fbe0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
fbf0: 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
fc00: 2a 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61  */..    assert(a
fc10: 54 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61  Type);.    pC->a
fc20: 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  Offset = aOffset
fc30: 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64   = &aType[nField
fc40: 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  ];.    pC->paylo
fc50: 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64  adSize = payload
fc60: 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61  Size;.    pC->ca
fc70: 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
fc80: 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a  acheCtr;..    /*
fc90: 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20   Figure out how 
fca0: 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69  many bytes are i
fcb0: 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  n the header */.
fcc0: 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
fcd0: 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52        zData = zR
fce0: 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ec;.    }else{. 
fcf0: 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49       if( pC->isI
fd00: 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  ndex ){.        
fd10: 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
fd20: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
fd30: 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
fd40: 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  l);.      }else{
fd50: 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
fd60: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
fd70: 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
fd80: 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
fd90: 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49      }.      /* I
fda0: 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74  f KeyFetch()/Dat
fdb0: 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64  aFetch() managed
fdc0: 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69   to get the enti
fdd0: 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20  re payload,.    
fde0: 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61    ** save the pa
fdf0: 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d  yload in the pC-
fe00: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68  >aRow cache.  Th
fe10: 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20  at will save us 
fe20: 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61  from.      ** ha
fe30: 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64  ving to make add
fe40: 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f  itional calls to
fe50: 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65   fetch the conte
fe60: 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20  nt portion of.  
fe70: 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
fe80: 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
fe90: 20 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79    if( avail>=pay
fea0: 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
feb0: 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61      zRec = zData
fec0: 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
fed0: 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b  ow = (u8*)zData;
fee0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
fef0: 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
ff00: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
ff10: 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  }.    /* The fol
ff20: 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73  lowing assert is
ff30: 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73   true in all cas
ff40: 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20  es accept when. 
ff50: 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
ff60: 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  se file has been
ff70: 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72   corrupted exter
ff80: 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20  nally..    **   
ff90: 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30   assert( zRec!=0
ffa0: 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f   || avail>=paylo
ffb0: 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e  adSize || avail>
ffc0: 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48  =9 ); */.    szH
ffd0: 64 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74  drSz = getVarint
ffe0: 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f  32((u8*)zData, o
fff0: 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20  ffset);..    /* 
10000 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
10010 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
10020 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
10030 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
10040 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
10050 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
10060 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
10070 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
10080 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
10090 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
100a0 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
100b0 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
100c0 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
100d0 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
100e0 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
100f0 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
10100 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
10110 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
10120 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
10130 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
10140 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
10150 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
10160 63 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65  c && avail<offse
10170 74 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  t ){.      sMem.
10180 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
10190 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20   sMem.db = 0;.  
101a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
101b0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
101c0 28 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65  (pCrsr, 0, offse
101d0 74 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  t, pC->isIndex, 
101e0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
101f0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
10200 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
10210 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10220 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
10230 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
10240 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d   }.    zEndHdr =
10250 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66   (u8 *)&zData[of
10260 66 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20  fset];.    zIdx 
10270 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73  = (u8 *)&zData[s
10280 7a 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a  zHdrSz];..    /*
10290 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72   Scan the header
102a0 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66   and use it to f
102b0 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65  ill in the aType
102c0 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d  [] and aOffset[]
102d0 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20  .    ** arrays. 
102e0 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63   aType[i] will c
102f0 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20  ontain the type 
10300 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20  integer for the 
10310 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75  i-th.    ** colu
10320 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  mn and aOffset[i
10330 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74  ] will contain t
10340 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
10350 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20  he beginning.   
10360 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
10370 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f  d to the start o
10380 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  f the data for t
10390 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20  he i-th column. 
103a0 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d     */.    for(i=
103b0 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b  0; i<nField; i++
103c0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64  ){.      if( zId
103d0 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20  x<zEndHdr ){.   
103e0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
103f0 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  = offset;.      
10400 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72    zIdx += getVar
10410 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70  int32(zIdx, aTyp
10420 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f  e[i]);.        o
10430 66 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33  ffset += sqlite3
10440 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
10450 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20  n(aType[i]);.   
10460 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10470 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73    /* If i is les
10480 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74  s that nField, t
10490 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65  hen there are le
104a0 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69  ss fields in thi
104b0 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63  s.        ** rec
104c0 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43  ord than SetNumC
104d0 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64  olumns indicated
104e0 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d   there are colum
104f0 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  ns in the.      
10500 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20    ** table. Set 
10510 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61  the offset for a
10520 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73  ny extra columns
10530 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a   not present in.
10540 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72          ** the r
10550 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73  ecord to 0. This
10560 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f   tells code belo
10570 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c  w to store a NUL
10580 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73  L.        ** ins
10590 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c  tead of deserial
105a0 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72  izing a value fr
105b0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  om the record.. 
105c0 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
105d0 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30    aOffset[i] = 0
105e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
105f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10600 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
10610 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73  ;.    sMem.flags
10620 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20   = MEM_Null;..  
10630 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20    /* If we have 
10640 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72  read more header
10650 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63   data than was c
10660 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
10670 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f  header,.    ** o
10680 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
10690 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
106a0 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73  ppears to be pas
106b0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
106c0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20  .    ** record, 
106d0 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
106e0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
106f0 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65  appears to be be
10700 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20  fore the end.   
10710 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
10720 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c  d (when all fiel
10730 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65  ds present), the
10740 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61  n we must be dea
10750 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74  ling .    ** wit
10760 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  h a corrupt data
10770 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  base..    */.   
10780 20 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64   if( zIdx>zEndHd
10790 72 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c  r || offset>payl
107a0 6f 61 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c  oadSize .     ||
107b0 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20   (zIdx==zEndHdr 
107c0 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f  && offset!=paylo
107d0 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20  adSize) ){.     
107e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
107f0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
10800 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10810 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
10820 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c    /* Get the col
10830 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  umn information.
10840 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
10850 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
10860 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c  n .  ** deserial
10870 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72  ize the value fr
10880 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49  om the record. I
10890 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
108a0 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e   zero,.  ** then
108b0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
108c0 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20  nough fields in 
108d0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61  the record to sa
108e0 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72  tisfy the.  ** r
108f0 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73  equest.  In this
10900 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76   case, set the v
10910 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20  alue NULL or to 
10920 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a  P4 if P4 is.  **
10930 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
10940 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f  Mem object..  */
10950 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70  .  if( aOffset[p
10960 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  2] ){.    assert
10970 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
10980 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  );.    if( zRec 
10990 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
109a0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
109b0 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20  ternal(pDest);. 
109c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
109d0 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
109e0 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
109f0 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
10a00 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
10a10 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71  {.      len = sq
10a20 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
10a30 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d  ypeLen(aType[p2]
10a40 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10a50 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65  VdbeMemMove(&sMe
10a60 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  m, pDest);.     
10a70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
10a80 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
10a90 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
10aa0 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
10ab0 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
10ac0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
10ad0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
10ae0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10af0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
10b00 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
10b10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10b20 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a  beSerialGet((u8*
10b30 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32  )zData, aType[p2
10b40 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
10b50 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20  .    pDest->enc 
10b60 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65  = encoding;.  }e
10b70 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  lse{.    if( pOp
10b80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
10b90 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10ba0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
10bb0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
10bc0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
10bd0 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  tic);.    }else{
10be0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10bf0 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
10c00 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20  Null );.    }.  
10c10 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79  }..  /* If we dy
10c20 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
10c30 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c  ted space to hol
10c40 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74  d the data (in t
10c50 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
10c60 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
10c70 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
10c80 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
10c90 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a  rol of that.  **
10ca0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
10cb0 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65  ocated space ove
10cc0 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73  r to the pDest s
10cd0 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54  tructure..  ** T
10ce0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
10cf0 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f  emory copy..  */
10d00 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c  .  if( sMem.zMal
10d10 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72  loc ){.    asser
10d20 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e  t( sMem.z==sMem.
10d30 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61  zMalloc );.    a
10d40 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
10d50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
10d60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10d70 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
10d80 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
10d90 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a  tr)) || pDest->z
10da0 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20  ==sMem.z );.    
10db0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
10dc0 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f  ~(MEM_Ephem|MEM_
10dd0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65  Static);.    pDe
10de0 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  st->flags |= MEM
10df0 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74  _Term;.    pDest
10e00 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
10e10 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63    pDest->zMalloc
10e20 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b   = sMem.zMalloc;
10e30 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
10e40 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
10e50 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b  riteable(pDest);
10e60 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
10e70 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
10e80 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
10e90 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10ea0 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
10eb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10ec0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
10ed0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
10ee0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
10ef0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
10f00 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
10f10 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
10f20 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10f30 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
10f40 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
10f50 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
10f60 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
10f70 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
10f80 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
10f90 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
10fa0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
10fb0 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
10fc0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
10fd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
10fe0 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a  nity: {.  char *
10ff0 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
11000 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44  >p4.z;.  Mem *pD
11010 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  ata0 = &p->aMem[
11020 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20  pOp->p1];.  Mem 
11030 2a 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30  *pLast = &pData0
11040 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d  [pOp->p2-1];.  M
11050 65 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72  em *pRec;..  for
11060 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
11070 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
11080 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  +){.    ExpandBl
11090 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70  ob(pRec);.    ap
110a0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
110b0 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
110c0 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
110d0 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ng);.  }.  break
110e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
110f0 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
11100 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
11110 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
11120 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
11130 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e  th P1 into a sin
11140 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69  gle entry.** sui
11150 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73  table for use as
11160 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
11170 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
11180 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
11190 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
111a0 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
111b0 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72  he format are ir
111c0 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67  relevant as long
111d0 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f   as.** the OP_Co
111e0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
111f0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
11200 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65  d later..** Refe
11210 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65  r to source code
11220 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68   comments for th
11230 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
11240 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61   record.** forma
11250 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  t..**.** P4 may 
11260 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
11270 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
11280 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
11290 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
112a0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
112b0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
112c0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
112d0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
112e0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
112f0 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
11300 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
11310 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
11320 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
11330 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
11340 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
11350 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
11360 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
11370 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
11380 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
11390 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
113a0 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
113b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
113c0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20  eRecord: {.  /* 
113d0 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
113e0 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
113f0 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
11400 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
11410 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
11420 20 2a 2a 0a 20 20 2a 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11450 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11470 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
11480 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
11490 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
114a0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
114b0 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
114c0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
114d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
11510 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
11520 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
11530 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
11540 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
11550 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
11560 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e  ** and so froth.
11570 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
11580 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
11590 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
115a0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
115b0 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
115c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
115d0 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
115e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
115f0 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
11600 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
11610 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
11620 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
11630 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
11640 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
11650 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
11660 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75   data0..  */.  u
11670 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
11680 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
11690 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
116a0 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
116b0 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
116c0 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
116d0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
116e0 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
116f0 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
11700 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11710 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
11720 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d   */.  int nHdr =
11730 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
11740 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11750 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
11760 2a 2f 0a 20 20 75 36 34 20 6e 42 79 74 65 20 3d  */.  u64 nByte =
11770 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44   0;         /* D
11780 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
11790 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
117a0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  rd */.  int nZer
117b0 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
117c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
117d0 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
117e0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
117f0 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
11800 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
11810 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11820 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
11830 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
11840 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
11850 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
11860 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
11870 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
11880 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
11890 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
118a0 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
118b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
118c0 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
118d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
118e0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
118f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11900 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
11910 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
11920 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
11930 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11940 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
11950 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
11960 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
11970 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
11980 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
11990 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
119a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
119b0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
119c0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
119d0 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  */..  nField = p
119e0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
119f0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
11a00 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
11a10 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
11a20 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
11a30 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  ld<=p->nMem );. 
11a40 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d   pData0 = &p->aM
11a50 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
11a60 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
11a70 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
11a80 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
11a90 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
11aa0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
11ab0 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74  at;..  /* Loop t
11ac0 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
11ad0 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
11ae0 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
11af0 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
11b00 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
11b10 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
11b20 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
11b30 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52  d..  */.  for(pR
11b40 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
11b50 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
11b60 0a 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20  .    int len;.  
11b70 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
11b80 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
11b90 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
11ba0 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74  finity[pRec-pDat
11bb0 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  a0], encoding);.
11bc0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52      }.    if( pR
11bd0 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
11be0 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20  ro && pRec->n>0 
11bf0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
11c00 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
11c10 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  b(pRec);.    }. 
11c20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
11c30 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
11c40 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
11c50 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
11c60 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
11c70 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
11c80 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
11c90 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
11ca0 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
11cb0 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
11cc0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
11cd0 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
11ce0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
11cf0 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65   /* Only pure ze
11d00 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20  ro-filled BLOBs 
11d10 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20  can be input to 
11d20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20  this Opcode..   
11d30 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20     ** We do not 
11d40 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68  allow blobs with
11d50 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20   a prefix and a 
11d60 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c  zero-filled tail
11d70 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f  . */.      nZero
11d80 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20   += pRec->u.i;. 
11d90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e     }else if( len
11da0 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   ){.      nZero 
11db0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  = 0;.    }.  }..
11dc0 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69    /* Add the ini
11dd0 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69  tial header vari
11de0 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65  nt and total the
11df0 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20   size */.  nHdr 
11e00 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c  += nVarint = sql
11e10 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
11e20 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69  dr);.  if( nVari
11e30 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
11e40 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20  Len(nHdr) ){.   
11e50 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
11e60 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
11e70 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e  a-nZero;.  if( n
11e80 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
11e90 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11ea0 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
11eb0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
11ec0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
11ed0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
11ee0 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
11ef0 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
11f00 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
11f10 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
11f20 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
11f30 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
11f40 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
11f50 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
11f60 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
11f70 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
11f80 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
11f90 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
11fa0 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f  Grow() could clo
11fb0 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
11fc0 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
11fd0 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
11fe0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
11ff0 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
12000 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
12010 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
12020 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12030 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
12040 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79 74  mGrow(pOut, nByt
12050 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  e, 0) ){.    got
12060 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
12070 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
12080 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
12090 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
120a0 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
120b0 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
120c0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72  rd, nHdr);.  for
120d0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
120e0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
120f0 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  +){.    serial_t
12100 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
12110 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
12120 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
12130 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
12140 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
12150 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
12160 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61  );      /* seria
12170 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20  l type */.  }.  
12180 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
12190 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
121a0 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61  ec++){  /* seria
121b0 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20  l data */.    i 
121c0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
121d0 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
121e0 6f 72 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69 2c  ord[i], nByte-i,
121f0 20 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d   pRec, file_form
12200 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
12210 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
12220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12230 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
12240 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
12250 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20  t->n = nByte;.  
12260 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12270 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
12280 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
12290 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
122a0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  ){.    pOut->u.i
122b0 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
122c0 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
122d0 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
122e0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
122f0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
12300 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
12310 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
12320 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
12330 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
12340 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
12350 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
12360 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
12370 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61  ../* Opcode: Sta
12380 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20  tement P1 * * * 
12390 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e  *.**.** Begin an
123a0 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74   individual stat
123b0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
123c0 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20  n which is part 
123d0 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74  of a larger.** t
123e0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69  ransaction.  Thi
123f0 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74  s is needed so t
12400 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hat the statemen
12410 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c  t.** can be roll
12420 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
12430 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
12440 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
12450 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
12460 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
12470 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
12480 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75  nsaction will au
12490 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63  tomatically.** c
124a0 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
124b0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
124c0 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
124d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
124e0 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f  urrently in auto
124f0 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61  commit mode (tha
12500 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c  t .** is to say,
12510 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74   if it is in bet
12520 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43  ween BEGIN and C
12530 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66  OMMIT).** and if
12540 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74   there are no ot
12550 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65  her active state
12560 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d  ments on the sam
12570 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
12580 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nnection, then t
12590 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
125a0 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74   a no-op.  No st
125b0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
125c0 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64  ion.** is needed
125d0 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72   since any error
125e0 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72   can use the nor
125f0 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  mal ROLLBACK pro
12600 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20  cess to.** undo 
12610 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  changes..**.** I
12620 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  f a statement tr
12630 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
12640 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61  rted, then a sta
12650 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66  tement journal f
12660 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61  ile.** will be a
12670 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69  llocated and ini
12680 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20  tialized..**.** 
12690 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  The statement is
126a0 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61   begun on the da
126b0 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
126c0 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20   index P1.  The 
126d0 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  main.** database
126e0 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64   file has an ind
126f0 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20  ex of 0 and the 
12700 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
12710 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a  mporary tables.*
12720 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  * has an index o
12730 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f 1..*/.case OP_
12740 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69  Statement: {.  i
12750 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
12760 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69  t==0 || db->acti
12770 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
12780 20 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e     int i = pOp->
12790 70 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  p1;.    Btree *p
127a0 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  Bt;.    assert( 
127b0 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44  i>=0 && i<db->nD
127c0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
127d0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21   db->aDb[i].pBt!
127e0 3d 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20  =0 );.    pBt = 
127f0 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a  db->aDb[i].pBt;.
12800 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
12810 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
12820 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73  s(pBt) );.    as
12830 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
12840 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30  ask & (1<<i))!=0
12850 20 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c   );.    if( !sql
12860 69 74 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d  ite3BtreeIsInStm
12870 74 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  t(pBt) ){.      
12880 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
12890 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b  eBeginStmt(pBt);
128a0 0a 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64  .      p->opened
128b0 53 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20  Statement = 1;. 
128c0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
128d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
128e0 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
128f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
12900 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
12910 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
12920 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
12930 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
12940 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
12950 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
12960 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
12970 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
12980 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
12990 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
129a0 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74  his one), then t
129b0 68 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  he COMMIT or ROL
129c0 4c 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20  LBACK statement 
129d0 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  fails..**.** Thi
129e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
129f0 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
12a00 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
12a10 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
12a20 75 38 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  u8 i = pOp->p1;.
12a30 20 20 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d 20    u8 rollback = 
12a40 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73 65  pOp->p2;..  asse
12a50 72 74 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d 30  rt( i==1 || i==0
12a60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
12a70 3d 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d  =1 || rollback==
12a80 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  0 );..  assert( 
12a90 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
12aa0 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  t>0 );  /* At le
12ab0 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
12ac0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20  is active */..  
12ad0 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
12ae0 62 65 43 6e 74 3e 31 20 26 26 20 69 20 26 26 20  beCnt>1 && i && 
12af0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
12b00 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
12b10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
12b20 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
12b30 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 6f  T or ROLLBACK, o
12b40 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20  ther VMs are.   
12b50 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   ** still runnin
12b60 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63  g, and a transac
12b70 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20  tion is active, 
12b80 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
12b90 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a  indicating.    *
12ba0 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  * that the other
12bb0 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
12bc0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
12bd0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
12be0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
12bf0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
12c00 25 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  %s transaction -
12c10 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
12c20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
12c30 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20  ogress",.       
12c40 20 72 6f 6c 6c 62 61 63 6b 20 3f 20 22 72 6f 6c   rollback ? "rol
12c50 6c 62 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69 74  lback" : "commit
12c60 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
12c70 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
12c80 65 20 69 66 28 20 69 21 3d 64 62 2d 3e 61 75 74  e if( i!=db->aut
12c90 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
12ca0 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
12cb0 20 20 20 20 61 73 73 65 72 74 28 20 69 3d 3d 31      assert( i==1
12cc0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
12cd0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
12ce0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
12cf0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
12d00 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
12d10 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 69 3b  >autoCommit = i;
12d20 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
12d30 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
12d40 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
12d50 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
12d60 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
12d70 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d 69 3b 0a  toCommit = 1-i;.
12d80 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
12d90 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
12da0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
12db0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
12dc0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
12dd0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
12de0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
12df0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
12e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
12e10 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
12e20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
12e30 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
12e40 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
12e50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
12e60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
12e70 20 20 20 20 20 28 21 69 29 3f 22 63 61 6e 6e 6f       (!i)?"canno
12e80 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
12e90 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
12ea0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
12eb0 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29        (rollback)
12ec0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
12ed0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
12ee0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
12f10 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
12f20 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
12f30 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
12f40 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
12f50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12f60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
12f70 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
12f80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
12f90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
12fa0 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
12fb0 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
12fc0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
12fd0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
12fe0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
12ff0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
13000 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
13010 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
13020 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
13030 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
13040 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
13050 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
13060 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
13070 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
13080 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
13090 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
130a0 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
130b0 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
130c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
130d0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
130e0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
130f0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
13100 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
13110 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
13120 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
13130 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
13140 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
13150 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
13160 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
13170 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
13180 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
13190 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
131a0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
131b0 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
131c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
131d0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
131e0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
131f0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
13200 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
13210 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
13220 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
13230 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
13240 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
13250 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
13260 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
13270 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
13280 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
13290 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
132a0 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
132b0 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
132c0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
132d0 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
132e0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
132f0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
13300 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
13310 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
13320 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
13330 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
13340 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
13350 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
13360 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
13370 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
13380 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
13390 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  p1;.  Btree *pBt
133a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
133b0 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
133c0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
133d0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
133e0 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  i))!=0 );.  pBt 
133f0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
13400 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
13410 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13420 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
13430 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
13440 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
13450 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
13460 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
13470 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
13480 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
13490 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
134a0 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
134b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
134c0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
134d0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
134e0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
134f0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
13500 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13510 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
13520 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13530 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
13540 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13550 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
13560 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
13570 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
13580 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
13590 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30 20  er P2..** P3==0 
135a0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
135b0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69 73  rsion.  P3==1 is
135c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
135d0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20 69  rmat..** P3==2 i
135e0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
135f0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
13600 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
13610 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13620 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13630 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13640 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13650 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13660 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13670 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  tables..**.** If
13680 20 50 31 20 69 73 20 6e 65 67 61 74 69 76 65 2c   P1 is negative,
13690 20 74 68 65 6e 20 74 68 69 73 20 69 73 20 61 20   then this is a 
136a0 72 65 71 75 65 73 74 20 74 6f 20 72 65 61 64 20  request to read 
136b0 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a 2a  the size of a.**
136c0 20 64 61 74 61 62 61 73 65 73 20 66 72 65 65 2d   databases free-
136d0 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62 65  list. P3 must be
136e0 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68 69   set to 1 in thi
136f0 73 20 63 61 73 65 2e 20 54 68 65 20 61 63 74 75  s case. The actu
13700 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 61  al.** database a
13710 63 63 65 73 73 65 64 20 69 73 20 28 28 50 31 2b  ccessed is ((P1+
13720 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61 6d  1)*-1). For exam
13730 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d 65  ple, a P1 parame
13740 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f 72  ter of -1.** cor
13750 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74 61  responds to data
13760 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29 2c  base 0 ("main"),
13770 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20 64   a P1 of -2 is d
13780 61 74 61 62 61 73 65 20 31 20 28 22 74 65 6d 70  atabase 1 ("temp
13790 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ")..**.** There 
137a0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
137b0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
137c0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
137d0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
137e0 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
137f0 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
13800 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
13810 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
13820 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
13830 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
13840 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
13850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
13860 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
13870 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
13880 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
13890 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  1;.  int iCookie
138a0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20 61   = pOp->p3;..  a
138b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
138c0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
138d0 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  TA );.  if( iDb<
138e0 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20 28  0 ){.    iDb = (
138f0 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20 20  -1*(iDb+1));.   
13900 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b 0a   iCookie *= -1;.
13910 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 44    }.  assert( iD
13920 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
13930 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
13940 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
13950 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
13960 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
13970 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
13980 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65 78  ;.  /* The index
13990 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c 75  ing of meta valu
139a0 65 73 20 61 74 20 74 68 65 20 73 63 68 65 6d 61  es at the schema
139b0 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62 79   layer is off by
139c0 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20 74   one from.  ** t
139d0 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20 74  he indexing in t
139e0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
139f0 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73 69   The btree consi
13a00 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f 0a  ders meta[0] to.
13a10 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d 62    ** be the numb
13a20 65 72 20 6f 66 20 66 72 65 65 20 70 61 67 65 73  er of free pages
13a30 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
13a40 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61   (a read-only va
13a50 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d 65  lue).  ** and me
13a60 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65 20  ta[1] to be the 
13a70 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20  schema cookie.  
13a80 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72  The schema layer
13a90 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a 20   considers.  ** 
13aa0 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68  meta[1] to be th
13ab0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e  e schema cookie.
13ac0 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
13ad0 73 68 69 66 74 20 74 68 65 20 69 6e 64 65 78 0a  shift the index.
13ae0 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20 74    ** by one in t
13af0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
13b00 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 72  tement..  */.  r
13b10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
13b20 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
13b30 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69 43  iDb].pBt, 1 + iC
13b40 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
13b50 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
13b60 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65  .i = iMeta;.  Me
13b70 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
13b80 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
13b90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13ba0 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
13bb0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13bc0 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
13bd0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
13be0 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
13bf0 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
13c00 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
13c10 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
13c20 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30 20  se P1..** P2==0 
13c30 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
13c40 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69 73  rsion.  P2==1 is
13c50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
13c60 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20 69  rmat..** P2==2 i
13c70 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
13c80 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
13c90 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
13ca0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13cb0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13cc0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13cd0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13ce0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13cf0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13d00 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
13d10 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
13d20 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
13d30 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
13d40 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
13d50 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
13d60 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
13d70 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
13d80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
13d90 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
13da0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
13db0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13dc0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
13dd0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
13de0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
13df0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
13e00 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
13e10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
13e20 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
13e30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
13e40 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
13e50 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
13e60 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
13e70 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
13e80 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
13e90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
13ea0 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
13eb0 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20 28  Bt, 1+pOp->p2, (
13ec0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
13ed0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
13ee0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
13ef0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
13f00 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
13f10 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
13f20 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
13f30 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
13f40 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
13f50 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
13f60 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
13f70 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
13f80 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
13f90 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20 20  Op->p2==1 ){.   
13fa0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
13fb0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
13fc0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
13fd0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
13fe0 66 6f 72 6d 61 74 20 3d 20 70 49 6e 33 2d 3e 75  format = pIn3->u
13ff0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
14000 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
14010 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
14020 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
14030 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
14040 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
14050 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
14060 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
14070 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
14080 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14090 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
140a0 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  db);.  }.  break
140b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
140c0 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
140d0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
140e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
140f0 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
14100 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
14110 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
14120 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
14130 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
14140 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
14150 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
14160 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
14170 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
14180 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
14190 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
141a0 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
141b0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
141c0 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
141d0 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
141e0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
141f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
14200 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
14210 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
14220 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
14230 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
14240 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
14250 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
14260 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
14270 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
14280 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
14290 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
142a0 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
142b0 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
142c0 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
142d0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
142e0 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
142f0 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
14300 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
14310 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
14320 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
14330 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
14340 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
14350 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
14360 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
14370 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
14380 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
14390 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
143a0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
143b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
143c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
143d0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
143e0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
143f0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
14400 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
14410 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14420 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
14430 31 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  1, (u32 *)&iMeta
14440 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
14450 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
14460 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20      iMeta = 0;. 
14470 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
14480 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21  ITE_OK && iMeta!
14490 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
144a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
144b0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
144c0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
144d0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
144e0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
144f0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
14500 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
14510 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
14520 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
14530 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
14540 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
14550 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
14560 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
14570 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
14580 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
14590 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
145a0 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
145b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
145c0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
145d0 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
145e0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
145f0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
14600 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
14610 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
14620 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
14630 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
14640 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
14650 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
14660 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
14670 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
14680 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
14690 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
146a0 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
146b0 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
146c0 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
146d0 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
146e0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
146f0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
14700 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
14710 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
14720 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
14730 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
14740 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
14750 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
14760 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
14770 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
14780 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
14790 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
147a0 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
147b0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
147c0 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
147d0 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
147e0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
147f0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
14800 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
14810 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
14820 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
14830 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
14840 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
14850 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  ..    sqlite3Exp
14860 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
14870 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72  ments(db);.    r
14880 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
14890 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
148a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
148b0 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
148c0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
148d0 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
148e0 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
148f0 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
14900 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
14910 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
14920 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
14930 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
14940 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
14950 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
14960 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
14970 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
14980 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
14990 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
149a0 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
149b0 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
149c0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
149d0 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
149e0 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
149f0 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
14a00 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
14a10 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
14a20 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
14a30 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
14a40 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
14a50 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
14a60 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
14a70 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
14a80 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
14a90 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
14aa0 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
14ab0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
14ac0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
14ad0 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
14ae0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
14af0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
14b00 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
14b10 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
14b20 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
14b30 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
14b40 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
14b50 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
14b60 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
14b70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
14b80 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
14b90 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
14ba0 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
14bb0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
14bc0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
14bd0 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
14be0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
14bf0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
14c00 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
14c10 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
14c20 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
14c30 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
14c40 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
14c50 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
14c60 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
14c70 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
14c80 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
14c90 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
14ca0 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
14cb0 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
14cc0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
14cd0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
14ce0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
14cf0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
14d00 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
14d10 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
14d20 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
14d30 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61  the.** content a
14d40 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
14d50 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73  uence of indices
14d60 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f  .  P4 is NULL fo
14d70 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61  r cursors.** tha
14d80 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69  t are not pointi
14d90 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a  ng to indices..*
14da0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
14db0 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
14dc0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
14dd0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
14de0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
14df0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
14e00 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
14e10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
14e20 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
14e30 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
14e40 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
14e50 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
14e60 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
14e70 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
14e80 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
14e90 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
14ea0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
14eb0 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
14ec0 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  s the.** content
14ed0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73   and collating s
14ee0 65 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63  equence of indic
14ef0 65 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20  es.  P4 is NULL 
14f00 66 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74  for cursors.** t
14f10 68 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e  hat are not poin
14f20 74 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e  ting to indices.
14f30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
14f40 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
14f50 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
14f60 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
14f70 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
14f80 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
14f90 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
14fa0 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
14fb0 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
14fc0 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
14fd0 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
14fe0 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
14ff0 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
15000 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
15010 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
15020 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
15030 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
15040 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  Write: {.  int i
15050 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
15060 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  t p2 = pOp->p2;.
15070 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
15080 3e 70 33 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  >p3;.  int wrFla
15090 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
150a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
150b0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20  ur;.  Db *pDb;. 
150c0 20 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e   .  assert( iDb>
150d0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
150e0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
150f0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
15100 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  1<<iDb))!=0 );. 
15110 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
15120 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
15130 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
15140 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
15150 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
15160 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
15170 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
15180 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
15190 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
151a0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
151b0 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
151c0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
151d0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
151e0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
151f0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
15200 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
15210 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
15220 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p5 ){.    asser
15230 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
15240 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d  ssert( p2<=p->nM
15250 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  em );.    pIn2 =
15260 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20   &p->aMem[p2];. 
15270 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15280 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
15290 29 3b 0a 20 20 20 20 70 32 20 3d 20 70 49 6e 32  );.    p2 = pIn2
152a0 2d 3e 75 2e 69 3b 0a 20 20 20 20 61 73 73 65 72  ->u.i;.    asser
152b0 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
152c0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
152d0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
152e0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20  ateCursor(p, i, 
152f0 26 70 4f 70 5b 2d 31 5d 2c 20 69 44 62 2c 20 31  &pOp[-1], iDb, 1
15300 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
15310 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
15320 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
15330 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
15340 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
15350 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
15360 4f 70 2d 3e 70 34 2e 70 2c 20 70 43 75 72 2d 3e  Op->p4.p, pCur->
15370 70 43 75 72 73 6f 72 29 3b 0a 20 20 69 66 28 20  pCursor);.  if( 
15380 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
15390 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
153a0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
153b0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
153c0 3b 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79  ;.    pCur->pKey
153d0 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
153e0 70 2d 3e 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  p->db);.  }else{
153f0 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  .    pCur->pKeyI
15400 6e 66 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73  nfo = 0;.  }.  s
15410 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
15420 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
15430 59 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y: {.      p->pc
15440 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
15450 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15460 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
15470 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15480 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
15490 4c 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20  LITE_OK: {.     
154a0 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 73 71 6c   int flags = sql
154b0 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
154c0 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
154d0 20 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63       /* Sanity c
154e0 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74  hecking.  Only t
154f0 68 65 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69  he lower four bi
15500 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ts of the flags 
15510 62 79 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20  byte should.    
15520 20 20 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42    ** be used.  B
15530 69 74 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29  it 3 (mask 0x08)
15540 20 69 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c   is unpredictabl
15550 65 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20  e.  The lower 3 
15560 62 69 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d  bits.      ** (m
15570 61 73 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64  ask 0x07) should
15580 20 62 65 20 65 69 74 68 65 72 20 35 20 28 69 6e   be either 5 (in
15590 74 6b 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f  tkey+leafdata fo
155a0 72 20 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20  r tables) or.   
155b0 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74     ** 2 (zerodat
155c0 61 20 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20  a for indices). 
155d0 20 49 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74   If these condit
155e0 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74  ions are not met
155f0 20 69 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a   it can.      **
15600 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20   only mean that 
15610 77 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77  we are dealing w
15620 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
15630 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20  tabase file.    
15640 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15650 66 6c 61 67 73 20 26 20 30 78 66 30 29 21 3d 30  flags & 0xf0)!=0
15660 20 7c 7c 20 28 28 66 6c 61 67 73 20 26 20 30 78   || ((flags & 0x
15670 30 37 29 21 3d 35 20 26 26 20 28 66 6c 61 67 73  07)!=5 && (flags
15680 20 26 20 30 78 30 37 29 21 3d 32 29 20 29 7b 0a   & 0x07)!=2) ){.
15690 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
156a0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
156b0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
156c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
156d0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
156e0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
156f0 20 28 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f   (flags & BTREE_
15700 49 4e 54 4b 45 59 29 21 3d 30 3b 0a 20 20 20 20  INTKEY)!=0;.    
15710 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20    pCur->isIndex 
15720 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52 45 45  = (flags & BTREE
15730 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30 3b 0a 20  _ZERODATA)!=0;. 
15740 20 20 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d 30       /* If P4==0
15750 20 69 74 20 6d 65 61 6e 73 20 77 65 20 61 72 65   it means we are
15760 20 65 78 70 65 63 74 65 64 20 74 6f 20 6f 70 65   expected to ope
15770 6e 20 61 20 74 61 62 6c 65 2e 20 20 49 66 20 50  n a table.  If P
15780 34 21 3d 30 20 74 68 65 6e 0a 20 20 20 20 20 20  4!=0 then.      
15790 2a 2a 20 77 65 20 65 78 70 65 63 74 20 74 6f 20  ** we expect to 
157a0 62 65 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69 6e  be opening an in
157b0 64 65 78 2e 20 20 49 66 20 74 68 69 73 20 69 73  dex.  If this is
157c0 20 6e 6f 74 20 77 68 61 74 20 68 61 70 70 65 6e   not what happen
157d0 65 64 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ed,.      ** the
157e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n the database i
157f0 73 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20  s corrupt.      
15800 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 43  */.      if( (pC
15810 75 72 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70  ur->isTable && p
15820 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
15830 45 59 49 4e 46 4f 29 0a 20 20 20 20 20 20 20 7c  EYINFO).       |
15840 7c 20 28 70 43 75 72 2d 3e 69 73 49 6e 64 65 78  | (pCur->isIndex
15850 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 21   && pOp->p4type!
15860 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b 0a  =P4_KEYINFO) ){.
15870 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
15880 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
15890 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
158a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
158b0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
158c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
158d0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d    case SQLITE_EM
158e0 50 54 59 3a 20 7b 0a 20 20 20 20 20 20 70 43 75  PTY: {.      pCu
158f0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
15900 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
15910 49 4e 46 4f 3b 0a 20 20 20 20 20 20 70 43 75 72  INFO;.      pCur
15920 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75  ->isIndex = !pCu
15930 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20 20  r->isTable;.    
15940 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20    pCur->pCursor 
15950 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
15960 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
15970 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
15980 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
15990 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
159a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
159b0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
159c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
159d0 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
159e0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
159f0 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
15a00 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
15a10 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
15a20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
15a30 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
15a40 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
15a50 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
15a60 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
15a70 54 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f 72  The transient or
15a80 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
15a90 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
15aa0 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
15ab0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
15ac0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
15ad0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
15ae0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
15af0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
15b00 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
15b10 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
15b20 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
15b30 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
15b40 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
15b50 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
15b60 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
15b70 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
15b80 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
15b90 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
15ba0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
15bb0 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
15bc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   This opcode was
15bd0 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65   once called Ope
15be0 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74  nTemp.  But that
15bf0 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66   created.** conf
15c00 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68  usion because th
15c10 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62  e term "temp tab
15c20 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72  le", might refer
15c30 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20   either.** to a 
15c40 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68  TEMP table at th
15c50 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20  e SQL level, or 
15c60 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65  to a table opene
15c70 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63  d by.** this opc
15c80 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20  ode.  Then this 
15c90 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20  opcode was call 
15ca0 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75  OpenVirtual.  Bu
15cb0 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65  t.** that create
15cc0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68  d confusion with
15cd0 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75   the whole virtu
15ce0 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a  al-table idea..*
15cf0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70  /.case OP_OpenEp
15d00 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 69 6e 74  hemeral: {.  int
15d10 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
15d20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
15d30 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
15d40 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20  int openFlags = 
15d50 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
15d60 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
15d70 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
15d80 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
15d90 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
15da0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
15db0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
15dc0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
15dd0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
15de0 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73  SIENT_DB;..  ass
15df0 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70  ert( i>=0 );.  p
15e00 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
15e10 73 6f 72 28 70 2c 20 69 2c 20 70 4f 70 2c 20 2d  sor(p, i, pOp, -
15e20 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
15e30 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
15e40 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
15e50 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
15e60 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
15e70 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49  y(db, 0, 1, SQLI
15e80 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f  TE_DEFAULT_TEMP_
15e90 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e  CACHE_SIZE, open
15ea0 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20  Flags,.         
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20    &pCx->pBt);.  
15ed0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
15ee0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
15ef0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
15f00 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
15f10 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
15f20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
15f30 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
15f40 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
15f50 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
15f60 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
15f70 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
15f80 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
15f90 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f  h the BTREE_ZERO
15fa0 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65  DATA flag before
15fb0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
15fc0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
15fd0 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
15fe0 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
15ff0 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
16000 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
16010 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
16020 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45  page 1 (an INTKE
16030 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
16040 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
16050 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  .pKeyInfo ){.   
16060 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
16070 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
16080 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
16090 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
160a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
160b0 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
160c0 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
160d0 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20  ZERODATA); .    
160e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
160f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
16100 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
16110 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
16120 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16130 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
16140 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
16150 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
16180 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
16190 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
161a0 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
161b0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
161c0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
161d0 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
161e0 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
161f0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
16200 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
16210 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
16220 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
16230 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
16240 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
16250 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
16260 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
16270 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
16280 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
16290 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a   !pCx->isTable;.
162a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
162b0 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
162c0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
162d0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
162e0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
162f0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
16300 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
16310 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
16320 6f 66 20 64 61 74 61 2e 20 20 41 6e 79 20 61 74  of data.  Any at
16330 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
16340 20 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66 20 64   second row of d
16350 61 74 61 20 63 61 75 73 65 73 20 74 68 65 0a 2a  ata causes the.*
16360 2a 20 66 69 72 73 74 20 72 6f 77 20 74 6f 20 62  * first row to b
16370 65 20 64 65 6c 65 74 65 64 2e 20 20 41 6c 6c 20  e deleted.  All 
16380 64 61 74 61 20 69 73 20 64 65 6c 65 74 65 64 20  data is deleted 
16390 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
163a0 69 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a  is.** closed..**
163b0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
163c0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
163d0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
163e0 66 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e 67 20  ful for holding 
163f0 74 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c  the.** NEW or OL
16400 44 20 74 61 62 6c 65 73 20 69 6e 20 61 20 74 72  D tables in a tr
16410 69 67 67 65 72 2e 20 20 41 6c 73 6f 20 75 73 65  igger.  Also use
16420 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 61 20  d to hold the a 
16430 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
16440 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
16450 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
16460 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
16470 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
16480 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
16490 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
164a0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
164b0 0a 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e 73 65  .** When OP_Inse
164c0 72 74 20 69 73 20 65 78 65 63 75 74 65 64 20 74  rt is executed t
164d0 6f 20 69 6e 73 65 72 74 20 61 20 72 6f 77 20 69  o insert a row i
164e0 6e 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 20  n to the pseudo 
164f0 74 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20 70 73  table,.** the ps
16500 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
16510 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
16520 20 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e 20 63   make it's own c
16530 6f 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 72  opy of the.** or
16540 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e  iginal row data.
16550 20 49 66 20 50 32 20 69 73 20 30 2c 20 74 68 65   If P2 is 0, the
16560 6e 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  n the pseudo-tab
16570 6c 65 20 77 69 6c 6c 20 63 6f 70 79 20 74 68 65  le will copy the
16580 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77  .** original row
16590 20 64 61 74 61 2e 20 4f 74 68 65 72 77 69 73 65   data. Otherwise
165a0 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
165b0 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65 6d 6f  he original memo
165c0 72 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20 73 74  ry cell.** is st
165d0 6f 72 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ored. In this ca
165e0 73 65 2c 20 74 68 65 20 76 64 62 65 20 70 72 6f  se, the vdbe pro
165f0 67 72 61 6d 20 6d 75 73 74 20 65 6e 73 75 72 65  gram must ensure
16600 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 6d 65   that the .** me
16610 6d 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74 61 69  mory cell contai
16620 6e 69 6e 67 20 74 68 65 20 72 6f 77 20 64 61 74  ning the row dat
16630 61 20 69 73 20 6e 6f 74 20 6f 76 65 72 77 72 69  a is not overwri
16640 74 74 65 6e 20 75 6e 74 69 6c 20 74 68 65 0a 2a  tten until the.*
16650 2a 20 70 73 65 75 64 6f 20 74 61 62 6c 65 20 69  * pseudo table i
16660 73 20 63 6c 6f 73 65 64 20 28 6f 72 20 61 20 6e  s closed (or a n
16670 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
16680 65 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a 2f 0a  ed into it)..*/.
16690 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
166a0 64 6f 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  do: {.  int i = 
166b0 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
166c0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 61 73  ursor *pCx;.  as
166d0 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20  sert( i>=0 );.  
166e0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
166f0 72 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f 70 5b  rsor(p, i, &pOp[
16700 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69  -1], -1, 0);.  i
16710 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
16720 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
16730 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
16740 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  Cx->pseudoTable 
16750 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 65 70 68 65  = 1;.  pCx->ephe
16760 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 3d 20 70  mPseudoTable = p
16770 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
16780 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
16790 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a  x->isIndex = 0;.
167a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
167b0 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
167c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
167d0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
167e0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
167f0 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
16800 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
16810 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
16820 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
16830 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
16840 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  lose: {.  int i 
16850 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
16860 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
16870 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
16880 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
16890 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
168a0 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  [i]);.  p->apCsr
168b0 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  [i] = 0;.  break
168c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
168d0 4d 6f 76 65 47 65 20 50 31 20 50 32 20 50 33 20  MoveGe P1 P2 P3 
168e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
168f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
16900 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
16910 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
16920 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
16930 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65  .** use the inte
16940 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
16950 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
16960 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
16970 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
16980 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
16990 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
169a0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
169b0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
169c0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
169d0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
169e0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
169f0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
16a00 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
16a10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
16a20 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
16a30 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
16a40 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
16a50 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
16a60 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
16a70 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
16a80 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
16a90 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
16aa0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
16ab0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
16ac0 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 70 65 63  P2..**.** A spec
16ad0 69 61 6c 20 66 65 61 74 75 72 65 20 6f 66 20 74  ial feature of t
16ae0 68 69 73 20 6f 70 63 6f 64 65 20 28 61 6e 64 20  his opcode (and 
16af0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
16b00 68 65 0a 2a 2a 20 72 65 6c 61 74 65 64 20 4f 50  he.** related OP
16b10 5f 4d 6f 76 65 47 74 2c 20 4f 50 5f 4d 6f 76 65  _MoveGt, OP_Move
16b20 4c 74 2c 20 61 6e 64 20 4f 50 5f 4d 6f 76 65 4c  Lt, and OP_MoveL
16b30 65 29 20 69 73 20 74 68 61 74 20 69 66 20 50 32  e) is that if P2
16b40 20 69 73 0a 2a 2a 20 7a 65 72 6f 20 61 6e 64 20   is.** zero and 
16b50 50 31 20 69 73 20 61 6e 20 53 51 4c 20 74 61 62  P1 is an SQL tab
16b60 6c 65 20 28 61 20 62 2d 74 72 65 65 20 77 69 74  le (a b-tree wit
16b70 68 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 20  h integer keys) 
16b80 74 68 65 6e 0a 2a 2a 20 74 68 65 20 73 65 65 6b  then.** the seek
16b90 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
16ba0 69 6c 20 69 74 20 69 73 20 61 63 74 75 61 6c 6c  il it is actuall
16bb0 79 20 6e 65 65 64 65 64 2e 20 20 49 74 20 6d 69  y needed.  It mi
16bc0 67 68 74 20 62 65 0a 2a 2a 20 74 68 65 20 63 61  ght be.** the ca
16bd0 73 65 20 74 68 61 74 20 74 68 65 20 63 75 72 73  se that the curs
16be0 6f 72 20 69 73 20 6e 65 76 65 72 20 61 63 63 65  or is never acce
16bf0 73 73 65 64 2e 20 20 42 79 20 64 65 66 65 72 72  ssed.  By deferr
16c00 69 6e 67 20 74 68 65 0a 2a 2a 20 73 65 65 6b 2c  ing the.** seek,
16c10 20 77 65 20 61 76 6f 69 64 20 75 6e 6e 65 63 65   we avoid unnece
16c20 73 73 61 72 79 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ssary seeks..**.
16c30 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
16c40 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
16c50 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20  stinct, MoveLt, 
16c60 4d 6f 76 65 47 74 2c 20 4d 6f 76 65 4c 65 0a 2a  MoveGt, MoveLe.*
16c70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  /./* Opcode: Mov
16c80 65 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  eGt P1 P2 P3 P4 
16c90 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
16ca0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
16cb0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
16cc0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
16cd0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
16ce0 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65 72   use the integer
16cf0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
16d00 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
16d10 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
16d20 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
16d30 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
16d40 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
16d50 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
16d60 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
16d70 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
16d80 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
16d90 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
16da0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
16db0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
16dc0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
16dd0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
16de0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
16df0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
16e00 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
16e10 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
16e20 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
16e30 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
16e40 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
16e50 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
16e60 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
16e70 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
16e80 63 74 2c 20 4d 6f 76 65 4c 74 2c 20 4d 6f 76 65  ct, MoveLt, Move
16e90 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a  Ge, MoveLe.*/./*
16ea0 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 4c 74 20   Opcode: MoveLt 
16eb0 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
16ec0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
16ed0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
16ee0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
16ef0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
16f00 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
16f10 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
16f20 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
16f30 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
16f40 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
16f50 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
16f60 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
16f70 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
16f80 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
16f90 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
16fa0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
16fb0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
16fc0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
16fd0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
16fe0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
16ff0 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
17000 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
17010 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
17020 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
17030 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
17040 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
17050 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
17060 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
17070 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
17080 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
17090 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
170a0 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74  Distinct, MoveGt
170b0 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65  , MoveGe, MoveLe
170c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
170d0 6f 76 65 4c 65 20 50 31 20 50 32 20 50 33 20 50  oveLe P1 P2 P3 P
170e0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
170f0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
17100 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
17110 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
17120 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
17130 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65 67  ** use the integ
17140 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
17150 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
17160 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
17170 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
17180 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
17190 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
171a0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
171b0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
171c0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
171d0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
171e0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
171f0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
17200 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
17210 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
17220 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
17230 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
17240 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
17250 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
17260 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
17270 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
17280 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
17290 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
172a0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
172b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
172c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
172d0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
172e0 69 6e 63 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f  inct, MoveGt, Mo
172f0 76 65 47 65 2c 20 4d 6f 76 65 4c 74 0a 2a 2f 0a  veGe, MoveLt.*/.
17300 63 61 73 65 20 4f 50 5f 4d 6f 76 65 4c 74 3a 20  case OP_MoveLt: 
17310 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
17320 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
17330 4d 6f 76 65 4c 65 3a 20 20 20 20 20 20 20 20 20  MoveLe:         
17340 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
17350 63 61 73 65 20 4f 50 5f 4d 6f 76 65 47 65 3a 20  case OP_MoveGe: 
17360 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
17370 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
17380 4d 6f 76 65 47 74 3a 20 7b 20 20 20 20 20 20 20  MoveGt: {       
17390 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
173a0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
173b0 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
173c0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
173d0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
173e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
173f0 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
17400 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
17410 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
17420 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
17430 65 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d  es, oc;.    oc =
17440 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
17450 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
17460 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
17470 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
17480 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
17490 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
174a0 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20  In3);.      if( 
174b0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
174c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
174d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f  p->opcode==OP_Mo
174e0 76 65 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20  veGe );.        
174f0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
17500 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20   = iKey;.       
17510 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
17520 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70  d = 0;.        p
17530 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
17540 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  o = 1;.        b
17550 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
17560 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17570 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
17580 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
17590 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
175a0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
175b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
175c0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
175d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
175e0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
175f0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
17600 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 70   = iKey;.      p
17610 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
17620 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20 20 7d 65  = res==0;.    }e
17630 6c 73 65 7b 0a 20 20 20 20 20 20 55 6e 70 61 63  lse{.      Unpac
17640 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
17650 20 20 20 69 6e 74 20 6e 46 69 65 6c 64 20 3d 20     int nField = 
17660 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20  pOp->p4.i;.     
17670 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
17680 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
17690 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
176a0 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
176b0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
176c0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
176d0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46     r.nField = nF
176e0 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20  ield;.      if( 
176f0 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20 7c 7c  oc==OP_MoveGt ||
17700 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65 20 29   oc==OP_MoveLe )
17710 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67  {.        r.flag
17720 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
17730 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73  RKEY;.      }els
17740 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61  e{.        r.fla
17750 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  gs = 0;.      }.
17760 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
17770 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
17780 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17790 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
177a0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
177b0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
177c0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
177d0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
177e0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
177f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17800 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
17810 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
17820 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
17830 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
17840 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
17850 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
17860 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
17870 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
17880 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
17890 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
178a0 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  .    if( oc==OP_
178b0 4d 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  MoveGe || oc==OP
178c0 5f 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20 20 20  _MoveGt ){.     
178d0 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20   if( res<0 ){.  
178e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
178f0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
17900 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
17910 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17920 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17930 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17940 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
17950 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17960 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
17970 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
17980 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
17990 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
179a0 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 74 20  ( oc==OP_MoveLt 
179b0 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65  || oc==OP_MoveLe
179c0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
179d0 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s>=0 ){.        
179e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
179f0 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
17a00 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
17a10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17a20 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17a30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a40 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
17a50 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
17a60 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17a70 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
17a80 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
17a90 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
17aa0 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
17ab0 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
17ac0 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
17ad0 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
17ae0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
17af0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
17b00 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
17b10 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17b20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17b30 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
17b40 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
17b50 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17b60 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
17b70 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  !pC->pseudoTable
17b80 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
17b90 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74  happens when att
17ba0 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
17bb0 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74  the sqlite3_mast
17bc0 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20  er table.    ** 
17bd0 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20  for read access 
17be0 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
17bf0 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61  MPTY. In this ca
17c00 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  se always.    **
17c10 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28   take the jump (
17c20 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20  since there are 
17c30 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68  no records in th
17c40 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  e table)..    */
17c50 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
17c60 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
17c70 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17c80 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
17c90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   * *.**.** Regis
17ca0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
17cb0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
17cc0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
17cd0 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
17ce0 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74  ** If an entry t
17cf0 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20  hat matches the 
17d00 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
17d10 72 20 70 33 20 65 78 69 73 74 73 20 69 6e 20 50  r p3 exists in P
17d20 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  1 then.** jump t
17d30 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 50 33  o P2.  If the P3
17d40 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
17d50 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20  match any entry 
17d60 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61  in P1.** then fa
17d70 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50 31  ll thru.  The P1
17d80 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
17d90 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
17da0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a  matching entry.*
17db0 2a 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  * if it exists..
17dc0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
17dd0 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  uction is used t
17de0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
17df0 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72  IN operator wher
17e00 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61  e the.** left-ha
17e10 6e 64 20 73 69 64 65 20 69 73 20 61 20 53 45 4c  nd side is a SEL
17e20 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17e30 50 31 20 6d 61 79 20 62 65 20 61 20 74 72 75 65  P1 may be a true
17e40 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a   index, or it.**
17e50 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72   may be a tempor
17e60 61 72 79 20 69 6e 64 65 78 20 74 68 61 74 20 68  ary index that h
17e70 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74 73  olds the results
17e80 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a   of the SELECT.*
17e90 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54  * statement.   T
17ea0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17eb0 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20  is also used to 
17ec0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
17ed0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
17ee0 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74  d in SELECT stat
17ef0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
17f00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
17f10 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50  hecks if index P
17f20 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63  1 contains a rec
17f30 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a  ord for which .*
17f40 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20 73 65  * the first N se
17f50 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20  rialized values 
17f60 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
17f70 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76  e N serialized v
17f80 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  alues.** in the 
17f90 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74  record in regist
17fa0 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69  er P3, where N i
17fb0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
17fc0 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a  er of values in.
17fd0 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72 64  ** the P3 record
17fe0 20 28 74 68 65 20 50 33 20 72 65 63 6f 72 64 20   (the P3 record 
17ff0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
18000 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a  he P1 record). .
18010 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
18020 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
18030 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  ue, NotExists.*/
18040 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
18050 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  ound P1 P2 P3 * 
18060 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
18070 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
18080 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
18090 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20  MakeRecord.  P1 
180a0 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20  is.** an index. 
180b0 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69   If no entry exi
180c0 73 74 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d  sts in P1 that m
180d0 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20  atches the blob 
180e0 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
180f0 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79  P2.  If an entry
18100 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20   does existing, 
18110 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54  fall through.  T
18120 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
18130 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t.** pointing to
18140 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
18150 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  matches..**.** S
18160 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
18170 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69  NotExists, IsUni
18180 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
18190 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
181a0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
181b0 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
181c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
181d0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
181e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20   pOp->p1;.  int 
181f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
18200 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  0;.  VdbeCursor 
18210 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 69  *pC;.  assert( i
18220 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
18230 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
18240 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
18250 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70  );.  if( (pC = p
18260 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
18270 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69  rsor!=0 ){.    i
18280 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61  nt res;.    Unpa
18290 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
182a0 4b 65 79 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  Key;..    assert
182b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
182c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
182d0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
182e0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70 49  M_Blob );.    pI
182f0 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
18300 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
18310 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
18320 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c 20        aTempRec, 
18360 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
18370 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
18380 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 67  ey==0 ){.      g
18390 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
183a0 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  }.    if( pOp->o
183b0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
183c0 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  ){.      pIdxKey
183d0 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
183e0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
183f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
18400 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
18410 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
18420 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
18430 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
18440 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
18450 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f  leteUnpackedReco
18460 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  rd(pIdxKey);.   
18470 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18480 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61  OK ){.      brea
18490 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72  k;.    }.    alr
184a0 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
184b0 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64  s==0);.    pC->d
184c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
184d0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
184e0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
184f0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
18500 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
18510 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28  Found ){.    if(
18520 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
18530 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
18540 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
18550 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
18560 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
18570 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
18580 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18590 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32  : IsUnique P1 P2
185a0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
185b0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63  he P3 register c
185c0 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67  ontains an integ
185d0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
185e0 2e 20 20 43 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  .  Call this.** 
185f0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 52 2e  record number R.
18600 20 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65    The P4 registe
18610 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
18620 64 65 78 20 6b 65 79 20 63 72 65 61 74 65 64 0a  dex key created.
18630 2a 2a 20 75 73 69 6e 67 20 4d 61 6b 65 52 65 63  ** using MakeRec
18640 6f 72 64 2e 20 20 43 61 6c 6c 20 69 74 20 4b 2e  ord.  Call it K.
18650 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
18660 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61  index.  So it ha
18670 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74  s no data and it
18680 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 6f  s key consists o
18690 66 20 61 0a 2a 2a 20 72 65 63 6f 72 64 20 67 65  f a.** record ge
186a0 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
186b0 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65 20 74  keRecord where t
186c0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69 73  he last field is
186d0 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20 6f   the .** rowid o
186e0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
186f0 20 74 68 65 20 69 6e 64 65 78 20 72 65 66 65 72   the index refer
18700 73 20 74 6f 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 69  s to..** .** Thi
18710 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 73  s instruction as
18720 6b 73 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ks if there is a
18730 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20 77 68  n entry in P1 wh
18740 65 72 65 20 74 68 65 0a 2a 2a 20 66 69 65 6c 64  ere the.** field
18750 73 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20  s matches K but 
18760 74 68 65 20 72 6f 77 69 64 20 69 73 20 64 69 66  the rowid is dif
18770 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 0a 2a  ferent from R..*
18780 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
18790 20 73 75 63 68 20 65 6e 74 72 79 2c 20 74 68 65   such entry, the
187a0 6e 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6d  n there is an im
187b0 6d 65 64 69 61 74 65 0a 2a 2a 20 6a 75 6d 70 20  mediate.** jump 
187c0 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 79 20 65  to P2.  If any e
187d0 6e 74 72 79 20 64 6f 65 73 20 65 78 69 73 74 20  ntry does exist 
187e0 77 68 65 72 65 20 74 68 65 20 69 6e 64 65 78 20  where the index 
187f0 73 74 72 69 6e 67 0a 2a 2a 20 6d 61 74 63 68 65  string.** matche
18800 73 20 4b 20 62 75 74 20 74 68 65 20 72 65 63 6f  s K but the reco
18810 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
18820 20 52 2c 20 74 68 65 6e 20 74 68 65 20 72 65 63   R, then the rec
18830 6f 72 64 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ord.** number fo
18840 72 20 74 68 61 74 20 65 6e 74 72 79 20 69 73 20  r that entry is 
18850 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 50 33 20  written into P3 
18860 61 6e 64 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  and control.** f
18870 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
18880 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
18890 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
188a0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
188b0 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64  NotExists, Found
188c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e  .*/.case OP_IsUn
188d0 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f  ique: {        /
188e0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
188f0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
18900 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
18910 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  pCx;.  BtCursor 
18920 2a 70 43 72 73 72 3b 0a 20 20 4d 65 6d 20 2a 70  *pCrsr;.  Mem *p
18930 4b 3b 0a 20 20 69 36 34 20 52 3b 0a 0a 20 20 2f  K;.  i64 R;..  /
18940 2a 20 50 6f 70 20 74 68 65 20 76 61 6c 75 65 20  * Pop the value 
18950 52 20 6f 66 66 20 74 68 65 20 74 6f 70 20 6f 66  R off the top of
18960 20 74 68 65 20 73 74 61 63 6b 0a 20 20 2a 2f 0a   the stack.  */.
18970 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18980 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
18990 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
189a0 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
189b0 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
189c0 3b 0a 20 20 70 4b 20 3d 20 26 70 2d 3e 61 4d 65  ;.  pK = &p->aMe
189d0 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20  m[pOp->p4.i];.  
189e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
189f0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
18a00 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
18a10 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
18a20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
18a30 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  );.  pCx = p->ap
18a40 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
18a50 28 20 70 43 78 21 3d 30 20 29 3b 0a 20 20 70 43  ( pCx!=0 );.  pC
18a60 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73  rsr = pCx->pCurs
18a70 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21  or;.  if( pCrsr!
18a80 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
18a90 73 3b 0a 20 20 20 20 69 36 34 20 76 3b 20 20 20  s;.    i64 v;   
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
18ac0 6e 75 6d 62 65 72 20 74 68 61 74 20 6d 61 74 63  number that matc
18ad0 68 65 73 20 4b 20 2a 2f 0a 20 20 20 20 55 6e 70  hes K */.    Unp
18ae0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
18af0 78 4b 65 79 3b 20 20 20 2f 2a 20 55 6e 70 61 63  xKey;   /* Unpac
18b00 6b 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 50  ked version of P
18b10 34 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b  4 */..    /* Mak
18b20 65 20 73 75 72 65 20 4b 20 69 73 20 61 20 73 74  e sure K is a st
18b30 72 69 6e 67 20 61 6e 64 20 6d 61 6b 65 20 7a 4b  ring and make zK
18b40 65 79 20 70 6f 69 6e 74 20 74 6f 20 4b 0a 20 20  ey point to K.  
18b50 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
18b60 20 70 4b 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d   pK->flags & MEM
18b70 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70 49 64  _Blob );.    pId
18b80 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
18b90 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
18ba0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 4b  Cx->pKeyInfo, pK
18bb0 2d 3e 6e 2c 20 70 4b 2d 3e 7a 2c 0a 20 20 20 20  ->n, pK->z,.    
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
18bf0 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
18c00 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
18c10 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  0 ){.      goto 
18c20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
18c30 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73    pIdxKey->flags
18c40 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e   |= UNPACKED_IGN
18c50 4f 52 45 5f 52 4f 57 49 44 3b 0a 0a 20 20 20 20  ORE_ROWID;..    
18c60 2f 2a 20 53 65 61 72 63 68 20 66 6f 72 20 61 6e  /* Search for an
18c70 20 65 6e 74 72 79 20 69 6e 20 50 31 20 77 68 65   entry in P1 whe
18c80 72 65 20 61 6c 6c 20 62 75 74 20 74 68 65 20 6c  re all but the l
18c90 61 73 74 20 72 6f 77 69 64 20 6d 61 74 63 68 20  ast rowid match 
18ca0 4b 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  K.    ** If ther
18cb0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74  e is no such ent
18cc0 72 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ry, jump immedia
18cd0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20  tely to P2..    
18ce0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
18cf0 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  Cx->deferredMove
18d00 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 78  to==0 );.    pCx
18d10 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
18d20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
18d30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18d40 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
18d50 28 70 43 72 73 72 2c 20 70 49 64 78 4b 65 79 2c  (pCrsr, pIdxKey,
18d60 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
18d70 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18d80 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
18d90 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
18da0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
18db0 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 67 6f 74  xKey);.      got
18dc0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18dd0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
18de0 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20  if( res<0 ){.   
18df0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18e00 74 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20  treeNext(pCrsr, 
18e10 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
18e20 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
18e30 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
18e40 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
18e50 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63  3VdbeDeleteUnpac
18e60 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65  kedRecord(pIdxKe
18e70 79 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  y);.        brea
18e80 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
18e90 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
18ea0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
18eb0 72 65 28 70 43 78 2c 20 70 49 64 78 4b 65 79 2c  re(pCx, pIdxKey,
18ec0 20 26 72 65 73 29 3b 20 0a 20 20 20 20 73 71 6c   &res); .    sql
18ed0 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
18ee0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
18ef0 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72  xKey);.    if( r
18f00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18f10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18f20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
18f30 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  res>0 ){.      p
18f40 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
18f50 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
18f60 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 74 20 74    }..    /* At t
18f70 68 69 73 20 70 6f 69 6e 74 2c 20 70 43 72 73 72  his point, pCrsr
18f80 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
18f90 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20 77  an entry in P1 w
18fa0 68 65 72 65 20 61 6c 6c 20 62 75 74 0a 20 20 20  here all but.   
18fb0 20 2a 2a 20 74 68 65 20 66 69 6e 61 6c 20 65 6e   ** the final en
18fc0 74 72 79 20 28 74 68 65 20 72 6f 77 69 64 29 20  try (the rowid) 
18fd0 6d 61 74 63 68 65 73 20 4b 2e 20 20 43 68 65 63  matches K.  Chec
18fe0 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  k to see if the.
18ff0 20 20 20 20 2a 2a 20 66 69 6e 61 6c 20 72 6f 77      ** final row
19000 69 64 20 63 6f 6c 75 6d 6e 20 69 73 20 64 69 66  id column is dif
19010 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20  ferent from R.  
19020 49 66 20 69 74 20 65 71 75 61 6c 73 20 52 20 74  If it equals R t
19030 68 65 6e 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20  hen jump.    ** 
19040 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
19050 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 63  2..    */.    rc
19060 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
19070 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 76  xRowid(pCrsr, &v
19080 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
19090 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
190a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
190b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
190c0 0a 20 20 20 20 69 66 28 20 76 3d 3d 52 20 29 7b  .    if( v==R ){
190d0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
190e0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
190f0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
19100 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c 20 76 61   /* The final va
19110 72 69 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20  rint of the key 
19120 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  is different fro
19130 6d 20 52 2e 20 20 53 74 6f 72 65 20 69 74 20 62  m R.  Store it b
19140 61 63 6b 0a 20 20 20 20 2a 2a 20 69 6e 74 6f 20  ack.    ** into 
19150 72 65 67 69 73 74 65 72 20 52 33 2e 20 20 28 54  register R3.  (T
19160 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
19170 20 6f 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61   of an entry tha
19180 74 20 76 69 6f 6c 61 74 65 73 0a 20 20 20 20 2a  t violates.    *
19190 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
191a0 72 61 69 6e 74 2e 29 0a 20 20 20 20 2a 2f 0a 20  raint.).    */. 
191b0 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 76     pIn3->u.i = v
191c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
191d0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
191e0 74 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t );.  }.  break
191f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19200 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
19210 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65  P3 * *.**.** Use
19220 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19230 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
19240 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49   integer key.  I
19250 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77  f a record .** w
19260 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65  ith that key doe
19270 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74  s not exist in t
19280 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e  able of P1, then
19290 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
192a0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 64   If the record d
192b0 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20  oes exist, then 
192c0 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20  fall thru.  The 
192d0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a  cursor is left .
192e0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
192f0 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
19300 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
19310 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
19320 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  ween this operat
19330 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64  ion and NotFound
19340 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a   is that this.**
19350 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d   operation assum
19360 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e  es the key is an
19370 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61   integer and tha
19380 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65 20  t P1 is a table 
19390 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f  whereas.** NotFo
193a0 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20  und assumes key 
193b0 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  is a blob constr
193c0 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52  ucted from MakeR
193d0 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20  ecord and.** P1 
193e0 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a  is an index..**.
193f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
19400 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73  nd, NotFound, Is
19410 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
19420 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
19430 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
19440 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  n3 */.  int i = 
19450 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
19460 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
19470 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
19480 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
19490 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
194a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
194b0 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66  sr[i]!=0 );.  if
194c0 28 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d  ( (pCrsr = (pC =
194d0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
194e0 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20  Cursor)!=0 ){.  
194f0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 75    int res;.    u
19500 36 34 20 69 4b 65 79 3b 0a 20 20 20 20 61 73 73  64 iKey;.    ass
19510 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
19520 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
19530 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
19540 73 72 5b 69 5d 2d 3e 69 73 54 61 62 6c 65 20 29  sr[i]->isTable )
19550 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 69 6e 74  ;.    iKey = int
19560 54 6f 4b 65 79 28 70 49 6e 33 2d 3e 75 2e 69 29  ToKey(pIn3->u.i)
19570 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
19580 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
19590 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
195a0 69 4b 65 79 2c 20 30 2c 26 72 65 73 29 3b 0a 20  iKey, 0,&res);. 
195b0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
195c0 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
195d0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
195e0 69 64 20 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20  id = res==0;.   
195f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
19600 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
19610 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
19620 41 4c 45 3b 0a 20 20 20 20 2f 2a 20 72 65 73 20  ALE;.    /* res 
19630 6d 69 67 68 74 20 62 65 20 75 6e 69 6e 69 74 69  might be uniniti
19640 61 6c 69 7a 65 64 20 69 66 20 72 63 21 3d 53 51  alized if rc!=SQ
19650 4c 49 54 45 5f 4f 4b 2e 20 20 42 75 74 20 69 66  LITE_OK.  But if
19660 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20   rc!=SQLITE_OK. 
19670 20 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67     ** processing
19680 20 69 73 20 61 62 6f 75 74 20 74 6f 20 61 62 6f   is about to abo
19690 72 74 20 73 6f 20 77 65 20 72 65 61 6c 6c 79 20  rt so we really 
196a0 64 6f 20 6e 6f 74 20 63 61 72 65 20 77 68 65 74  do not care whet
196b0 68 65 72 20 6f 72 20 6e 6f 74 0a 20 20 20 20 2a  her or not.    *
196c0 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * the following 
196d0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 20 20  jump is taken.  
196e0 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
196f0 20 64 6f 20 6e 6f 74 20 73 74 72 65 73 73 20 6f   do not stress o
19700 76 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ver.    ** the e
19710 72 72 6f 72 20 74 68 61 74 20 76 61 6c 67 72 69  rror that valgri
19720 6e 64 20 73 6f 6d 65 74 69 6d 65 73 20 73 68 6f  nd sometimes sho
19730 77 73 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 73  ws on the next s
19740 74 61 74 65 6d 65 6e 74 20 77 68 65 6e 0a 20 20  tatement when.  
19750 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 69 6f 65    ** running ioe
19760 72 72 2e 74 65 73 74 20 61 6e 64 20 73 69 6d 69  rr.test and simi
19770 6c 61 72 20 66 61 69 6c 75 72 65 2d 72 65 63 6f  lar failure-reco
19780 76 65 72 79 20 74 65 73 74 20 73 63 72 69 70 74  very test script
19790 73 2e 29 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  s.) */.    if( r
197a0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
197b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
197c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
197d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
197e0 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  =0 );.    }.  }e
197f0 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65  lse if( !pC->pse
19800 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
19810 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
19820 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20  when an attempt 
19830 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63  to open a read c
19840 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20  ursor on the .  
19850 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
19860 65 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73  er table returns
19870 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20   SQLITE_EMPTY.. 
19880 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
19890 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
198a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
198b0 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
198c0 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
198d0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  lid==0 );.  }.  
198e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
198f0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
19900 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19910 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
19920 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
19930 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
19940 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
19950 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
19960 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
19970 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
19980 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
19990 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
199a0 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
199b0 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
199c0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
199d0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
199e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
199f0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
19a00 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19a10 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
19a20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
19a30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
19a40 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
19a50 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
19a60 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43 6f 75  apCsr[i]->seqCou
19a70 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79  nt++;.  MemSetTy
19a80 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
19a90 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
19aa0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
19ab0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
19ac0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
19ad0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
19ae0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
19af0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
19b00 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
19b10 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
19b20 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
19b30 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
19b40 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
19b50 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
19b60 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
19b70 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
19b80 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
19b90 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
19ba0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
19bb0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
19bc0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
19bd0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
19be0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c  that holds the l
19bf0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
19c00 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  y.** generated r
19c10 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e  ecord number.  N
19c20 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
19c30 62 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  bers are allowed
19c40 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74   to be less.** t
19c50 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
19c60 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
19c70 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
19c80 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46  imum, a SQLITE_F
19c90 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  ULL.** error is 
19ca0 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20  generated.  The 
19cb0 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
19cc0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
19cd0 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63  generated.** rec
19ce0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ord number.  Thi
19cf0 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
19d00 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
19d10 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
19d20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
19d30 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
19d40 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
19d50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
19d60 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
19d70 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19d80 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20  .  i64 v = 0;.  
19d90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
19da0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
19db0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19dc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
19dd0 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
19de0 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
19df0 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d  sr[i])->pCursor=
19e00 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
19e10 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
19e20 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
19e30 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
19e40 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
19e50 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
19e60 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
19e70 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
19e80 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
19e90 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
19ea0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
19eb0 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
19ec0 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
19ed0 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
19ee0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
19ef0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
19f00 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
19f10 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
19f20 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
19f30 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
19f40 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
19f50 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
19f60 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
19f70 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
19f80 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
19f90 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
19fa0 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
19fb0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
19fc0 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
19fd0 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
19fe0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
19ff0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
1a000 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
1a010 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
1a020 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1a030 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1a040 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1a050 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1a060 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1a070 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1a080 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1a090 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1a0a0 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1a0b0 20 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20   1000 times..   
1a0c0 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61   **.    ** For a
1a0d0 20 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73   table with less
1a0e0 20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20   than 2 billion 
1a0f0 65 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f  entries, the pro
1a100 62 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20  bability.    ** 
1a110 6f 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61  of not finding a
1a120 20 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73   unused rowid is
1a130 20 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e   about 1.0e-300.
1a140 20 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20    This is a .   
1a150 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f   ** non-zero pro
1a160 62 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74  bability, but it
1a170 20 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68   is still vanish
1a180 69 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20  ingly small and 
1a190 73 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65  should.    ** ne
1a1a0 76 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62  ver cause a prob
1a1b0 6c 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75  lem.  You are mu
1a1c0 63 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69  ch, much more li
1a1d0 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20  kely to have a. 
1a1e0 20 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66     ** hardware f
1a1f0 61 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20  ailure than for 
1a200 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74  this algorithm t
1a210 6f 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20  o fail..    **. 
1a220 20 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73     ** The analys
1a230 69 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  is in the previo
1a240 75 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73  us paragraph ass
1a250 75 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61  umes that you ha
1a260 76 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a  ve a good.    **
1a270 20 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f   source of rando
1a280 6d 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61  m numbers.  Is a
1a290 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1a2a0 6e 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29  n like lrand48()
1a2b0 0a 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f  .    ** good eno
1a2c0 75 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79  ugh?  Maybe. May
1a2d0 62 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72  be not. It's har
1a2e0 64 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65  d to know whethe
1a2f0 72 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d  r there.    ** m
1a300 69 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62  ight be subtle b
1a310 75 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c  ugs is some impl
1a320 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c  ementations of l
1a330 72 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20  rand48() that.  
1a340 20 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65    ** could cause
1a350 20 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76   problems. To av
1a360 6f 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c  oid uncertainty,
1a370 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73   SQLite uses its
1a380 20 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e   own .    ** ran
1a390 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72  dom number gener
1a3a0 61 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68  ator based on th
1a3b0 65 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e  e RC4 algorithm.
1a3c0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1a3d0 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69  o promote locali
1a3e0 74 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20  ty of reference 
1a3f0 66 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69  for repetitive i
1a400 6e 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20  nserts, the.    
1a410 2a 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74  ** first few att
1a420 65 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e  empts at choosin
1a430 67 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  g a random rowid
1a440 20 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73   pick values jus
1a450 74 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a  t a little.    *
1a460 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  * larger than th
1a470 65 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64  e previous rowid
1a480 2e 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e  .  This has been
1a490 20 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e   shown experimen
1a4a0 74 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20  tally.    ** to 
1a4b0 64 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64  double the speed
1a4c0 20 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65   of the COPY ope
1a4d0 72 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ration..    */. 
1a4e0 20 20 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53     int res, rx=S
1a4f0 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20  QLITE_OK, cnt;. 
1a500 20 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e     i64 x;.    cn
1a510 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28  t = 0;.    if( (
1a520 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
1a530 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28  s(pC->pCursor)&(
1a540 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52  BTREE_INTKEY|BTR
1a550 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d  EE_ZERODATA)) !=
1a560 0a 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45  .          BTREE
1a570 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20  _INTKEY ){.     
1a580 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1a590 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1a5a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a5b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a5c0 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c      assert( (sql
1a5d0 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
1a5e0 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54  C->pCursor) & BT
1a5f0 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29  REE_INTKEY)!=0 )
1a600 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73  ;.    assert( (s
1a610 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1a620 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20  (pC->pCursor) & 
1a630 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d  BTREE_ZERODATA)=
1a640 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  =0 );..#ifdef SQ
1a650 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
1a660 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1a670 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
1a680 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
1a690 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
1a6a0 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
1a6b0 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
1a6c0 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
1a6d0 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
1a6e0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1a6f0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
1a700 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
1a710 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
1a720 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
1a730 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
1a740 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
1a750 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
1a760 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
1a770 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1a780 44 20 20 28 20 28 28 28 75 36 34 29 30 78 37 66  D  ( (((u64)0x7f
1a790 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1a7a0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1a7b0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1a7c0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1a7d0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69 66  owid ){.      if
1a7e0 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56  ( pC->nextRowidV
1a7f0 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  alid ){.        
1a800 76 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69  v = pC->nextRowi
1a810 64 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  d;.      }else{.
1a820 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a830 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1a840 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a850 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1a860 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a870 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1a880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a890 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1a8a0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1a8b0 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a           v = 1;.
1a8c0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1a8d0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1a8e0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1a8f0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1a900 20 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65 79           v = key
1a910 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20 20  ToInt(v);.      
1a920 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52      if( v==MAX_R
1a930 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1a940 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
1a950 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
1a960 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a970 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20           v++;.  
1a980 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a990 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1a9a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1a9b0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1a9c0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1a9d0 20 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20   ){.        Mem 
1a9e0 2a 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20 61  *pMem;.        a
1a9f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1aa00 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
1aa10 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73  nMem ); /* P3 is
1aa20 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1aa30 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  cell */.        
1aa40 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1aa50 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53  pOp->p3];..REGIS
1aa60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1aa70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1aa80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1aa90 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1aaa0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1aab0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1aac0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1aad0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1aae0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1aaf0 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1ab00 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1ab10 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1ab20 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1ab30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1ab40 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20  FULL;.          
1ab50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ab60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1ab70 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1ab80 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1ab90 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1aba0 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1abb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1abc0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1abd0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1abe0 20 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52 4f      if( v<MAX_RO
1abf0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 70  WID ){.        p
1ac00 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1ac10 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  d = 1;.        p
1ac20 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20 76  C->nextRowid = v
1ac30 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  +1;.      }else{
1ac40 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65 78  .        pC->nex
1ac50 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b  tRowidValid = 0;
1ac60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1ac70 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
1ac80 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1ac90 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1aca0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51 4c  p3==0 );  /* SQL
1acb0 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68 61  ITE_FULL must ha
1acc0 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69 6f  ve occurred prio
1acd0 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20 20  r to this */.   
1ace0 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f 72     v = db->prior
1acf0 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  NewRowid;.      
1ad00 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
1ad10 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  o{.        if( c
1ad20 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66  nt==0 && (v&0xff
1ad30 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20  ffff)==v ){.    
1ad40 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20        v++;.     
1ad50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ad60 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
1ad70 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
1ad80 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20  , &v);.         
1ad90 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26   if( cnt<5 ) v &
1ada0 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
1adb0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1adc0 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ( v==0 ) continu
1add0 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69  e;.        x = i
1ade0 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20  ntToKey(v);.    
1adf0 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33      rx = sqlite3
1ae00 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1ae10 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1ae20 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26   0, (u64)x, 0, &
1ae30 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1ae40 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1ae50 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78  e( cnt<100 && rx
1ae60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ae70 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  es==0 );.      d
1ae80 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
1ae90 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20   = v;.      if( 
1aea0 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rx==SQLITE_OK &&
1aeb0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1aec0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1aed0 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  ULL;.        got
1aee0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aef0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1af00 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1af10 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1af20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1af30 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1af40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1af50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1af60 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1af70 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1af80 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1af90 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
1afa0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
1afb0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1afc0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
1afd0 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
1afe0 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
1aff0 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
1b000 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
1b010 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
1b020 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
1b030 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
1b040 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
1b050 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
1b060 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
1b070 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69  alue stored regi
1b080 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
1b090 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
1b0a0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1b0b0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
1b0c0 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67  t.** be an integ
1b0d0 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  er..**.** If the
1b0e0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1b0f0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1b100 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
1b110 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
1b120 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
1b130 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
1b140 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
1b150 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
1b160 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
1b170 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
1b180 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
1b190 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
1b1a0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
1b1b0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
1b1c0 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
1b1d0 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
1b1e0 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72  fied)..**.** Par
1b1f0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1b200 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1b210 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1b220 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1b230 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1b240 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1b250 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1b260 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1b270 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1b280 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1b290 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1b2a0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1b2b0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1b2c0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1b2d0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1b2e0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1b2f0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1b300 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1b310 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1b320 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1b330 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1b340 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1b350 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1b360 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1b370 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1b380 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1b390 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1b3a0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1b3b0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1b3c0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1b3d0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1b3e0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1b3f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1b400 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1b410 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1b420 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1b430 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1b440 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1b450 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  ert: {.  Mem *pD
1b460 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ata = &p->aMem[p
1b470 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p2];.  Mem *
1b480 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1b490 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36 34  pOp->p3];..  i64
1b4a0 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65 20   iKey;   /* The 
1b4b0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
1b4c0 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
1b4d0 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
1b4e0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  ed */.  int i = 
1b4f0 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1b500 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1b510 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1b520 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1b530 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b  C = p->apCsr[i];
1b540 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1b550 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1b560 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 7c 7c 20  ->pCursor!=0 || 
1b570 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
1b580 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
1b590 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
1b5a0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
1b5b0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1b5c0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1b5d0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
1b5e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
1b5f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
1b600 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 69 6e 74 54  ;..  iKey = intT
1b610 6f 4b 65 79 28 70 4b 65 79 2d 3e 75 2e 69 29 3b  oKey(pKey->u.i);
1b620 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1b630 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1b640 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
1b650 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1b660 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1b670 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   ) db->lastRowid
1b680 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
1b690 69 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69  if( pC->nextRowi
1b6a0 64 56 61 6c 69 64 20 26 26 20 70 4b 65 79 2d 3e  dValid && pKey->
1b6b0 75 2e 69 3e 3d 70 43 2d 3e 6e 65 78 74 52 6f 77  u.i>=pC->nextRow
1b6c0 69 64 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 65  id ){.    pC->ne
1b6d0 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30  xtRowidValid = 0
1b6e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 44 61 74  ;.  }.  if( pDat
1b6f0 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
1b700 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
1b710 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
1b720 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
1b730 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1b740 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
1b750 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
1b760 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  ) );.  }.  if( p
1b770 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
1b780 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65  {.    if( !pC->e
1b790 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1b7a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1b7b0 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e 70  DbFree(db, pC->p
1b7c0 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Data);.    }.   
1b7d0 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65 79   pC->iKey = iKey
1b7e0 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61 20  ;.    pC->nData 
1b7f0 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20 20  = pData->n;.    
1b800 69 66 28 20 70 44 61 74 61 2d 3e 7a 3d 3d 70 44  if( pData->z==pD
1b810 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20  ata->zMalloc || 
1b820 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  pC->ephemPseudoT
1b830 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43  able ){.      pC
1b840 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d  ->pData = pData-
1b850 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70  >z;.      if( !p
1b860 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  C->ephemPseudoTa
1b870 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ble ){.        p
1b880 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Data->flags &= ~
1b890 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20 20  MEM_Dyn;.       
1b8a0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c 3d   pData->flags |=
1b8b0 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20   MEM_Ephem;.    
1b8c0 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c      pData->zMall
1b8d0 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  oc = 0;.      }.
1b8e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b8f0 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71 6c   pC->pData = sql
1b900 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e  ite3Malloc( pC->
1b910 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20 20  nData+2 );.     
1b920 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61 20   if( !pC->pData 
1b930 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b940 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d 3e       memcpy(pC->
1b950 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a 2c  pData, pData->z,
1b960 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20 20   pC->nData);.   
1b970 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d     pC->pData[pC-
1b980 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20 20  >nData] = 0;.   
1b990 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d     pC->pData[pC-
1b9a0 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a 20  >nData+1] = 0;. 
1b9b0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75 6c     }.    pC->nul
1b9c0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  lRow = 0;.  }els
1b9d0 65 7b 0a 20 20 20 20 69 6e 74 20 6e 5a 65 72 6f  e{.    int nZero
1b9e0 3b 0a 20 20 20 20 69 66 28 20 70 44 61 74 61 2d  ;.    if( pData-
1b9f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1ba00 6f 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  o ){.      nZero
1ba10 20 3d 20 70 44 61 74 61 2d 3e 75 2e 69 3b 0a 20   = pData->u.i;. 
1ba20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ba30 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
1ba40 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1ba50 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
1ba60 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
1ba70 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1ba90 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
1baa0 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1bad0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 3b 0a  OPFLAG_APPEND);.
1bae0 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f 77    }.  .  pC->row
1baf0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1bb00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1bb10 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1bb20 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1bb30 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1bb40 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1bb50 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1bb60 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1bb70 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1bb80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1bb90 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1bba0 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1bbb0 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1bbc0 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1bbd0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1bbe0 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1bbf0 3b 0a 20 20 20 20 69 6e 74 20 6f 70 20 3d 20 28  ;.    int op = (
1bc00 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1bc10 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
1bc20 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
1bc30 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
1bc40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1bc50 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
1bc60 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1bc70 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
1bc80 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
1bc90 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
1bca0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
1bcb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1bcc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
1bcd0 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
1bce0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
1bcf0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
1bd00 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
1bd10 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1bd20 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
1bd30 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
1bd40 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1bd50 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
1bd60 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
1bd70 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
1bd80 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
1bd90 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1bda0 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
1bdb0 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
1bdc0 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
1bdd0 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
1bde0 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
1bdf0 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
1be00 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
1be10 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
1be20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
1be30 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1be40 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
1be50 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1be60 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1be70 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1be80 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1be90 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
1bea0 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
1beb0 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
1bec0 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
1bed0 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
1bee0 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
1bef0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1bf00 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
1bf10 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1bf20 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
1bf30 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
1bf40 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
1bf50 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
1bf60 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
1bf70 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1bf80 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
1bf90 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
1bfa0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
1bfb0 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
1bfc0 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
1bfd0 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
1bfe0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
1bff0 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ete: {.  int i =
1c000 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20   pOp->p1;.  i64 
1c010 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73  iKey;.  VdbeCurs
1c020 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1c030 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1c040 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c050 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1c060 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c080 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
1c090 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
1c0a0 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
1c0b0 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
1c0c0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
1c0d0 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
1c0e0 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
1c0f0 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64  Key to the rowid
1c100 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77   of the.  ** row
1c110 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a   being deleted..
1c120 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
1c130 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1c140 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1c150 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1c160 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73  sTable );.    as
1c170 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1c180 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61  sValid );  /* la
1c190 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70  stRowid set by p
1c1a0 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f  revious OP_NotFo
1c1b0 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20  und */.    iKey 
1c1c0 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
1c1d0 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
1c1e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
1c1f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
1c200 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1c210 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1c220 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c230 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
1c240 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 6e 65 78 74  sor);.  pC->next
1c250 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a  RowidValid = 0;.
1c260 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1c270 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1c280 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
1c290 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
1c2a0 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
1c2b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1c2c0 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
1c2d0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
1c2e0 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e  >p4.z ){.    con
1c2f0 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64  st char *zDb = d
1c300 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
1c310 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74  zName;.    const
1c320 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f   char *zTbl = pO
1c330 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d  p->p4.z;.    db-
1c340 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1c350 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
1c360 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
1c370 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1c380 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c390 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
1c3a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
1c3b0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
1c3c0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
1c3d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c3e0 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
1c3f0 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P1 * *.**.** Th
1c400 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65 74 73  is opcode resets
1c410 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
1c420 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
1c430 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69 73 20   to 0. If P1 is 
1c440 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  true,.** then th
1c450 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
1c460 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
1c470 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
1c480 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
1c490 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
1c4a0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
1c4b0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
1c4c0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
1c4d0 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65 20 69  s()).** before i
1c4e0 74 20 69 73 20 72 65 73 65 74 2e 20 54 68 69 73  t is reset. This
1c4f0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
1c500 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
1c510 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
1c520 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  unt: {.  if( pOp
1c530 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
1c540 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
1c550 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
1c560 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43 68 61  );.  }.  p->nCha
1c570 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
1c580 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c590 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20  RowData P1 P2 * 
1c5a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1c5b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1c5c0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
1c5d0 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
1c5e0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
1c5f0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
1c600 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
1c610 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
1c620 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
1c630 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
1c640 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
1c650 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
1c660 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
1c670 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
1c680 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
1c690 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
1c6a0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
1c6b0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
1c6c0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
1c6d0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1c6e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
1c6f0 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
1c700 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
1c710 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
1c720 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
1c730 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
1c740 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
1c750 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
1c760 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
1c770 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
1c780 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65  d onto the P3 re
1c790 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
1c7a0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
1c7b0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
1c7c0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
1c7d0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
1c7e0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
1c7f0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
1c800 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
1c810 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
1c820 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
1c830 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1c840 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
1c850 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
1c860 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1c870 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c880 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1c890 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a  Crsr;.  u32 n;..
1c8a0 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
1c8b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f  m[pOp->p2];..  /
1c8c0 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
1c8d0 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
1c8e0 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
1c8f0 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
1c900 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
1c910 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1c920 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1c930 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
1c940 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1c950 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
1c960 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20  code==OP_RowKey 
1c970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1c980 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d  >isIndex || pOp-
1c990 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44  >opcode==OP_RowD
1c9a0 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
1c9b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c9c0 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
1c9d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c9e0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 3d  pC->pseudoTable=
1c9f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ca00 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1ca10 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
1ca20 70 43 75 72 73 6f 72 3b 0a 20 20 72 63 20 3d 20  pCursor;.  rc = 
1ca30 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1ca40 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
1ca50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1ca60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1ca70 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  .  if( pC->isInd
1ca80 65 78 20 29 7b 0a 20 20 20 20 69 36 34 20 6e 36  ex ){.    i64 n6
1ca90 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  4;.    assert( !
1caa0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1cab0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
1cac0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  eySize(pCrsr, &n
1cad0 36 34 29 3b 0a 20 20 20 20 69 66 28 20 6e 36 34  64);.    if( n64
1cae0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
1caf0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
1cb00 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
1cb10 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
1cb20 20 20 6e 20 3d 20 6e 36 34 3b 0a 20 20 7d 65 6c    n = n64;.  }el
1cb30 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42  se{.    sqlite3B
1cb40 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
1cb50 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 69 66 28  sr, &n);.    if(
1cb60 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51   n>db->aLimit[SQ
1cb70 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
1cb80 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
1cb90 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
1cba0 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
1cbb0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
1cbc0 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20  t, n, 0) ){.    
1cbd0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
1cbe0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
1cbf0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1cc00 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
1cc10 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ;.  if( pC->isIn
1cc20 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  dex ){.    rc = 
1cc30 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
1cc40 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
1cc50 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
1cc60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1cc70 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
1cc80 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
1cc90 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
1cca0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
1ccb0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
1ccc0 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73  blob is ever cas
1ccd0 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55  t to text */.  U
1cce0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
1ccf0 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
1cd00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1cd10 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
1cd20 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69   *.**.** Store i
1cd30 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
1cd40 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
1cd50 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
1cd60 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
1cd70 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
1cd80 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
1cd90 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
1cda0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1cdb0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1cdc0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
1cdd0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
1cde0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cdf0 69 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74  i64 v;..  assert
1ce00 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1ce10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1ce20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1ce30 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ce40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ce50 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ce60 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1ce70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ce80 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1ce90 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1cea0 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  ){.    v = pC->l
1ceb0 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73  astRowid;.  }els
1cec0 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
1ced0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d  Table ){.    v =
1cee0 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b   keyToInt(pC->iK
1cef0 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ey);.  }else if(
1cf00 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
1cf10 20 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65      /* Leave the
1cf20 20 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20   rowid set to a 
1cf30 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61  NULL */.    brea
1cf40 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  k;.  }else{.    
1cf50 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1cf60 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  sor!=0 );.    sq
1cf70 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1cf80 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
1cf90 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54  v);.    v = keyT
1cfa0 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70  oInt(v);.  }.  p
1cfb0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1cfc0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
1cfd0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
1cfe0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cff0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
1d000 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
1d010 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
1d020 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
1d030 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
1d040 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
1d050 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
1d060 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
1d070 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
1d080 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
1d090 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
1d0a0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
1d0b0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1d0c0 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
1d0d0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
1d0e0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1d0f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1d100 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
1d110 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1d120 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
1d130 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
1d140 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  alid = 0;.  if( 
1d150 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
1d160 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
1d170 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
1d180 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
1d190 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d1a0 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
1d1b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
1d1c0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
1d1d0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
1d1e0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
1d1f0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
1d200 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
1d210 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
1d220 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1d230 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
1d240 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1d250 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
1d260 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
1d270 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1d280 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
1d290 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
1d2a0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
1d2b0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
1d2c0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
1d2d0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
1d2e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
1d2f0 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
1d300 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
1d310 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1d320 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1d330 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1d340 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
1d350 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1d360 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1d370 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d380 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1d390 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
1d3a0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
1d3b0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
1d3c0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
1d3d0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1d3e0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
1d3f0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65 73 3b  ->nullRow = res;
1d400 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1d410 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1d420 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1d430 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
1d440 28 20 72 65 73 20 26 26 20 70 4f 70 2d 3e 70 32  ( res && pOp->p2
1d450 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  >0 ){.    pc = p
1d460 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1d470 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1d480 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
1d490 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
1d4a0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
1d4b0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
1d4c0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
1d4d0 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
1d4e0 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
1d4f0 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
1d500 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
1d510 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
1d520 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
1d530 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
1d540 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
1d550 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
1d560 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
1d570 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
1d580 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
1d590 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
1d5a0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
1d5b0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
1d5c0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
1d5d0 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
1d5e0 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
1d5f0 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
1d600 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
1d610 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
1d620 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
1d630 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
1d640 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
1d650 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
1d660 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
1d670 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
1d680 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
1d690 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
1d6a0 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
1d6b0 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
1d6c0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1d6d0 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
1d6e0 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
1d6f0 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
1d700 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
1d710 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
1d720 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b  TATUS_SORT-1]++;
1d730 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
1d740 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
1d750 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
1d760 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
1d770 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
1d780 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
1d790 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
1d7a0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
1d7b0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
1d7c0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
1d7d0 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
1d7e0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1d7f0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
1d800 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1d810 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
1d820 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
1d830 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1d840 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
1d850 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
1d860 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
1d870 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
1d880 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
1d890 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
1d8a0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1d8b0 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
1d8c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
1d8d0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1d8e0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d8f0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1d900 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1d910 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
1d920 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1d930 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1d940 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
1d950 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1d960 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  ( (pCrsr = pC->p
1d970 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20  Cursor)!=0 ){.  
1d980 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d990 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
1d9a0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61  &res);.    pC->a
1d9b0 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 3b  tFirst = res==0;
1d9c0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1d9d0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1d9e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1d9f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1da00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73    }else{.    res
1da10 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 1;.  }.  pC->
1da20 6e 75 6c 6c 52 6f 77 20 3d 20 72 65 73 3b 0a 20  nullRow = res;. 
1da30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1da40 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
1da50 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65  >nOp );.  if( re
1da60 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
1da70 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1da80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1da90 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
1daa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
1dab0 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
1dac0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1dad0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
1dae0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
1daf0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
1db00 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
1db10 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
1db20 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
1db30 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
1db40 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
1db50 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
1db60 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
1db70 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
1db80 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
1db90 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1dba0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
1dbb0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
1dbc0 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
1dbd0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1dbe0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1dbf0 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
1dc00 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
1dc10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1dc20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
1dc30 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1dc40 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
1dc50 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
1dc60 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
1dc70 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
1dc80 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
1dc90 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
1dca0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
1dcb0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
1dcc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
1dcd0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
1dce0 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
1dcf0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
1dd00 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
1dd10 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
1dd20 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
1dd30 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
1dd40 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
1dd50 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1dd60 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
1dd70 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1dd80 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
1dd90 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1dda0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
1ddb0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1ddc0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1ddd0 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
1dde0 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
1ddf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1de00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1de10 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1de20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1de30 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d  >p1];.  if( pC==
1de40 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20  0 ){.    break; 
1de50 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23   /* See ticket #
1de60 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43  2273 */.  }.  pC
1de70 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1de80 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1de90 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  sr );.  res = 1;
1dea0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
1deb0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1dec0 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e   );.  rc = pOp->
1ded0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20  opcode==OP_Next 
1dee0 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ? sqlite3BtreeNe
1def0 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20  xt(pCrsr, &res) 
1df00 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1df30 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73  ious(pCrsr, &res
1df40 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
1df50 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61   = res;.  pC->ca
1df60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1df70 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
1df80 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
1df90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1dfa0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
1dfb0 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
1dfc0 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
1dfd0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1dfe0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1dff0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1e000 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
1e010 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
1e020 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e030 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
1e040 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1e050 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
1e060 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b  ds a SQL index k
1e070 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
1e080 65 0a 2a 2a 20 4d 61 6b 65 49 64 78 52 65 63 20  e.** MakeIdxRec 
1e090 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
1e0a0 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
1e0b0 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
1e0c0 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
1e0d0 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
1e0e0 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
1e0f0 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
1e100 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
1e110 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
1e120 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
1e130 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
1e140 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
1e150 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  append..**.** Th
1e160 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
1e170 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
1e180 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
1e190 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1e1a0 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
1e1b0 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
1e1c0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
1e1d0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
1e1e0 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in2 */.  int i 
1e1f0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
1e200 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1e210 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1e220 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1e230 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1e240 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1e250 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
1e260 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
1e270 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
1e280 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
1e290 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
1e2a0 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30  i])->pCursor)!=0
1e2b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1e2c0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1e2d0 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e  ;.    rc = Expan
1e2e0 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20  dBlob(pIn2);.   
1e2f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e300 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  OK ){.      int 
1e310 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
1e320 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1e330 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a   *zKey = pIn2->z
1e340 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1e350 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
1e360 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65  pCrsr, zKey, nKe
1e370 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70  y, "", 0, 0, pOp
1e380 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20 61 73 73  ->p3);.      ass
1e390 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
1e3a0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
1e3b0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1e3c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e3d0 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  E;.    }.  }.  b
1e3e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e3f0 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
1e400 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1e410 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1e420 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
1e430 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
1e440 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
1e450 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1e460 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
1e470 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
1e480 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
1e490 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
1e4a0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
1e4b0 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
1e4c0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1e4d0 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
1e4e0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1e4f0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73  or *pCrsr;.  ass
1e500 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
1e510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e520 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
1e530 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65  +pOp->p3<=p->nMe
1e540 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  m );.  assert( i
1e550 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1e560 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1e570 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
1e580 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
1e590 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
1e5a0 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
1e5b0 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  0 ){.    int res
1e5c0 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65  ;.    UnpackedRe
1e5d0 63 6f 72 64 20 72 3b 0a 20 20 20 20 72 2e 70 4b  cord r;.    r.pK
1e5e0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1e5f0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1e600 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  eld = pOp->p3;. 
1e610 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a     r.flags = 0;.
1e620 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
1e630 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1e640 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e650 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1e660 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1e670 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1e680 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1e690 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
1e6a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1e6b0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
1e6c0 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  sr);.    }.    a
1e6d0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
1e6e0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1e6f0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1e700 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e710 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  E;.  }.  break;.
1e720 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
1e730 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
1e740 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
1e750 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
1e760 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
1e770 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
1e780 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
1e790 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
1e7a0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
1e7b0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
1e7c0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
1e7d0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
1e7e0 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
1e7f0 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
1e800 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
1e810 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
1e820 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
1e830 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 49 64  o: Rowid, MakeId
1e840 78 52 65 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  xRec..*/.case OP
1e850 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20  _IdxRowid: {    
1e860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1e870 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1e880 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1e890 31 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  1;.  BtCursor *p
1e8a0 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
1e8b0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1e8c0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1e8d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1e8e0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d  ert( p->apCsr[i]
1e8f0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
1e900 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61  rsr = (pC = p->a
1e910 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f  pCsr[i])->pCurso
1e920 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 36 34  r)!=0 ){.    i64
1e930 20 72 6f 77 69 64 3b 0a 0a 20 20 20 20 61 73 73   rowid;..    ass
1e940 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
1e950 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
1e960 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1e970 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
1e980 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
1e990 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
1e9a0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
1e9b0 69 64 28 70 43 72 73 72 2c 20 26 72 6f 77 69 64  id(pCrsr, &rowid
1e9c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1e9d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e9e0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1e9f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ea00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d       }.      Mem
1ea10 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
1ea20 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
1ea30 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
1ea40 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  wid;.    }.  }. 
1ea50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ea60 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
1ea70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1ea80 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
1ea90 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
1eaa0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
1eab0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1eac0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
1ead0 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
1eae0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
1eaf0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
1eb00 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
1eb10 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
1eb20 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
1eb30 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
1eb40 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
1eb50 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
1eb60 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
1eb70 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1eb80 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1eb90 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
1eba0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
1ebb0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
1ebc0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1ebd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1ebe0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
1ebf0 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
1ec00 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
1ec10 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
1ec20 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f  lon .** prior to
1ec30 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
1ec40 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20    This make the 
1ec50 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
1ec60 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a   IdxGT except.**
1ec70 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79   that if the key
1ec80 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
1ec90 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  3 is a prefix of
1eca0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20   the key in the 
1ecb0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72  cursor,.** the r
1ecc0 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77  esult is false w
1ecd0 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20  hereas it would 
1ece0 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78  be true with Idx
1ecf0 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  GT..*/./* Opcode
1ed00 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
1ed10 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20   * P5.**.** The 
1ed20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
1ed30 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
1ed40 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
1ed50 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
1ed60 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
1ed70 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
1ed80 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
1ed90 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
1eda0 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
1edb0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1edc0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
1edd0 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
1ede0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
1edf0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
1ee00 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
1ee10 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1ee20 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
1ee30 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
1ee40 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
1ee50 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1ee60 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
1ee70 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
1ee80 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
1ee90 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
1eea0 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70   by an epsilon p
1eeb0 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20  rior .** to the 
1eec0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
1eed0 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f  s makes the opco
1eee0 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
1eef0 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LE..*/.case OP_I
1ef00 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
1ef10 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1ef20 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20  ase OP_IdxGE: { 
1ef30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1ef40 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 3d 20  in3 */.  int i= 
1ef50 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1ef60 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
1ef70 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1ef80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1ef90 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1efa0 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
1efb0 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1efc0 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  ])->pCursor!=0 )
1efd0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
1efe0 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72     UnpackedRecor
1eff0 64 20 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  d r;.    assert(
1f000 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1f010 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
1f020 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1f030 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
1f040 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1f050 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1f060 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  T32 );.    r.pKe
1f070 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1f080 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1f090 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1f0a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
1f0b0 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
1f0c0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1f0d0 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
1f0e0 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
1f0f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
1f100 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1f110 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
1f120 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
1f130 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1f140 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
1f150 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
1f160 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
1f170 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1f180 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
1f190 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
1f1a0 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
1f1b0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1f1c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f1d0 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
1f1e0 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
1f1f0 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
1f200 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f210 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
1f220 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f230 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
1f240 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f250 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
1f260 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
1f270 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1f280 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
1f290 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f2a0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1f2b0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
1f2c0 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
1f2d0 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
1f2e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1f2f0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
1f300 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
1f310 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
1f320 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
1f330 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1f340 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
1f350 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1f360 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
1f370 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
1f380 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
1f390 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
1f3a0 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
1f3b0 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
1f3c0 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
1f3d0 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
1f3e0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1f3f0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
1f400 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
1f410 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
1f420 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
1f430 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
1f440 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
1f450 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
1f460 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
1f470 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
1f480 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
1f490 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
1f4a0 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
1f4b0 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
1f4c0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
1f4d0 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
1f4e0 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
1f4f0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
1f500 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
1f510 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
1f520 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
1f530 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1f540 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
1f550 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f560 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
1f570 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
1f580 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
1f590 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1f5a0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1f5b0 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
1f5c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
1f5d0 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
1f5e0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f5f0 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
1f600 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64   int iCnt;.#ifnd
1f610 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1f620 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56 64  IRTUALTABLE.  Vd
1f630 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e  be *pVdbe;.  iCn
1f640 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
1f650 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
1f660 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64 62 65  dbe; pVdbe=pVdbe
1f670 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1f680 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
1f690 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
1f6a0 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
1f6b0 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
1f6c0 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
1f6d0 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
1f6e0 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
1f6f0 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
1f700 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  Cnt;.#endif.  if
1f710 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
1f720 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
1f730 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
1f740 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
1f750 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
1f760 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
1f770 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
1f780 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
1f790 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1f7a0 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
1f7b0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
1f7c0 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
1f7d0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
1f7e0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
1f7f0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65  &iMoved);.    Me
1f800 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1f810 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
1f820 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
1f830 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
1f840 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
1f850 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
1f860 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
1f870 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
1f880 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
1f890 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44  oved(&db->aDb[iD
1f8a0 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  b], iMoved, pOp-
1f8b0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  >p1);.    }.#end
1f8c0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
1f8d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1f8e0 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
1f8f0 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
1f900 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
1f910 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1f920 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1f930 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
1f940 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1f950 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
1f960 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
1f970 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
1f980 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
1f990 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
1f9a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1f9b0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
1f9c0 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
1f9d0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
1f9e0 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
1f9f0 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
1fa00 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
1fa10 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
1fa20 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
1fa30 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
1fa40 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
1fa50 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
1fa60 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
1fa70 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
1fa80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
1fa90 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
1faa0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
1fab0 62 6c 65 20 72 65 66 65 72 65 64 20 74 6f 20 6d  ble refered to m
1fac0 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
1fad0 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
1fae0 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
1faf0 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
1fb00 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
1fb10 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
1fb20 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
1fb30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
1fb40 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
1fb50 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
1fb60 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
1fb70 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
1fb80 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
1fb90 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1fba0 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
1fbb0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
1fbc0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
1fbd0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
1fbe0 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
1fbf0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
1fc00 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
1fc10 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
1fc20 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
1fc30 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1fc40 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
1fc50 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
1fc60 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
1fc70 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
1fc80 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
1fc90 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
1fca0 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
1fcb0 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
1fcc0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1fcd0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
1fce0 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
1fcf0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
1fd00 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e     p->aMem[pOp->
1fd10 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
1fd20 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
1fd30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1fd40 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
1fd50 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1fd60 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
1fd70 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
1fd80 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1fd90 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
1fda0 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
1fdb0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
1fdc0 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
1fdd0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1fde0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
1fdf0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
1fe00 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
1fe10 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
1fe20 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
1fe30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
1fe40 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
1fe50 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
1fe60 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
1fe70 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
1fe80 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
1fe90 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
1fea0 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
1feb0 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
1fec0 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
1fed0 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
1fee0 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
1fef0 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
1ff00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
1ff10 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
1ff20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
1ff30 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
1ff40 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1ff50 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
1ff60 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
1ff70 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
1ff80 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
1ff90 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
1ffa0 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
1ffb0 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
1ffc0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
1ffd0 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
1ffe0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
1fff0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
20000 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
20010 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
20020 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
20030 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
20040 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
20050 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
20060 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20070 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
20080 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
20090 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
200a0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
200b0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
200c0 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
200d0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
200e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
200f0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
20100 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
20110 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
20120 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
20130 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
20140 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20150 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
20160 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
20170 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
20180 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
20190 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
201a0 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
201b0 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c   BTREE_LEAFDATA|
201c0 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
201d0 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
201e0 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   = BTREE_ZERODAT
201f0 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  A;.  }.  rc = sq
20200 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
20210 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
20220 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
20230 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
20240 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  OK ){.    pOut->
20250 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 20 20  u.i = pgno;.    
20260 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
20270 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
20280 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20290 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
202a0 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34  chema P1 P2 * P4
202b0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
202c0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
202d0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
202e0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
202f0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
20300 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
20310 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
20320 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66  4.  P2 is the "f
20330 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c  orce" flag.   Al
20340 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70  ways do.** the p
20350 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20  arsing if P2 is 
20360 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20  true.  If P2 is 
20370 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73  false, then this
20380 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a   routine is a.**
20390 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63   no-op if the sc
203a0 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72  hema is not curr
203b0 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49  ently loaded.  I
203c0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
203d0 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65  f P2.** is false
203e0 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  , the SQLITE_MAS
203f0 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c  TER table is onl
20400 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20  y parsed if the 
20410 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73  rest of the.** s
20420 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79  chema is already
20430 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65   loaded into the
20440 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a   symbol table..*
20450 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20460 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
20470 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
20480 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
20490 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
204a0 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
204b0 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
204c0 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
204d0 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
204e0 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
204f0 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 53  ma: {.  char *zS
20500 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  ql;.  int iDb = 
20510 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73 74  pOp->p1;.  const
20520 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
20530 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
20540 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ata;..  assert( 
20550 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
20560 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20 21  ->nDb );.  if( !
20570 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62 48 61  pOp->p2 && !DbHa
20580 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
20590 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
205a0 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ed) ){.    break
205b0 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72 20  ;.  }.  zMaster 
205c0 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
205d0 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e  Db);.  initData.
205e0 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44  db = db;.  initD
205f0 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
20600 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  1;.  initData.pz
20610 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
20620 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20 73  rMsg;.  zSql = s
20630 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
20640 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e  ,.     "SELECT n
20650 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
20660 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
20670 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20  WHERE %s",.     
20680 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
20690 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
206a0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20 7a  ->p4.z);.  if( z
206b0 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Sql==0 ) goto no
206c0 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73 71  _mem;.  (void)sq
206d0 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
206e0 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  b);.  assert( db
206f0 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
20700 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  ;.  db->init.bus
20710 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44 61 74  y = 1;.  initDat
20720 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
20730 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62 2d  ;.  assert( !db-
20740 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
20750 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
20760 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
20770 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
20780 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
20790 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
207a0 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
207b0 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73 71 6c  itData.rc;.  sql
207c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
207d0 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74  Sql);.  db->init
207e0 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28 76 6f  .busy = 0;.  (vo
207f0 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
20800 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  On(db);.  if( rc
20810 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
20820 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
20830 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
20840 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
20850 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
20860 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e  ALYZE) && !defin
20870 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
20880 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64 65  ARSER)./* Opcode
20890 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
208a0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
208b0 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
208c0 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
208d0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
208e0 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
208f0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
20900 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
20910 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
20920 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
20930 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
20940 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
20950 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
20960 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
20970 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
20980 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
20990 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  : {.  int iDb = 
209a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
209b0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
209c0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
209d0 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
209e0 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62 29 3b  isLoad(db, iDb);
209f0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
20a00 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
20a10 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
20a20 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65  LYZE) && !define
20a30 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
20a40 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70  RSER)  */../* Op
20a50 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
20a60 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
20a70 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
20a80 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
20a90 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
20aa0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
20ab0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
20ac0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
20ad0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
20ae0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
20af0 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
20b00 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
20b10 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
20b20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
20b30 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
20b40 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
20b50 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
20b60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
20b70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
20b80 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
20b90 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
20ba0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
20bb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20bc0 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
20bd0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
20be0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
20bf0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
20c00 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
20c10 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
20c20 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
20c30 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
20c40 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
20c50 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
20c60 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
20c70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
20c80 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
20c90 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
20ca0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
20cb0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
20cc0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
20cd0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
20ce0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
20cf0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
20d00 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
20d10 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
20d20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20d30 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
20d40 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
20d50 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
20d60 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
20d70 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
20d80 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
20d90 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
20da0 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
20db0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
20dc0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
20dd0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
20de0 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
20df0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
20e00 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
20e10 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
20e20 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
20e30 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
20e40 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
20e50 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
20e60 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
20e70 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
20e80 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
20e90 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
20ea0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
20eb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
20ec0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
20ed0 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
20ee0 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
20ef0 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
20f00 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
20f10 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
20f20 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
20f30 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
20f40 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
20f50 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
20f60 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
20f70 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
20f80 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
20f90 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
20fa0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
20fb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
20fc0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
20fd0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
20fe0 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
20ff0 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
21000 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
21010 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
21020 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
21030 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
21040 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
21050 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
21060 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
21070 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
21080 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
21090 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
210a0 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
210b0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
210c0 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
210d0 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
210e0 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
210f0 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
21100 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
21110 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
21120 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
21130 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
21140 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
21150 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
21160 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
21170 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
21180 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
21190 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
211a0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
211b0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
211c0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
211d0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
211e0 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
211f0 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
21200 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
21210 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
21220 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
21230 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
21240 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
21250 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
21260 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
21270 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
21280 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
21290 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
212a0 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
212b0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
212c0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
212d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
212e0 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
212f0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
21300 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
21310 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
21320 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
21330 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
21340 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
21350 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
21360 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f  ning */.  .  nRo
21370 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
21380 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
21390 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
213a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
213b0 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
213c0 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
213d0 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
213e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
213f0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
21400 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
21410 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
21420 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
21430 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
21440 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
21450 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
21460 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
21470 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
21480 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
21490 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
214a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
214b0 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
214c0 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
214d0 6a 5d 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  j] = sqlite3Vdbe
214e0 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a  IntValue(&pIn1[j
214f0 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b  ]);.  }.  aRoot[
21500 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  j] = 0;.  assert
21510 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44  ( pOp->p5<db->nD
21520 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
21530 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
21540 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  1<<pOp->p5))!=0 
21550 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
21560 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
21570 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
21580 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
21590 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215b0 20 20 20 20 20 20 20 20 20 70 6e 45 72 72 2d 3e           pnErr->
215c0 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
215d0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
215e0 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
215f0 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
21600 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
21610 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
21620 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
21630 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
21640 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
21650 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
21660 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
21670 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
21680 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
21690 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
216a0 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
216b0 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
216c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
216d0 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
216e0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
216f0 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
21700 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
21710 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
21720 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
21730 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
21740 20 46 69 66 6f 57 72 69 74 65 20 50 31 20 2a 20   FifoWrite P1 * 
21750 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
21760 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 66 72  e the integer fr
21770 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 20 69  om register P1 i
21780 6e 74 6f 20 74 68 65 20 46 69 66 6f 2e 0a 2a 2f  nto the Fifo..*/
21790 0a 63 61 73 65 20 4f 50 5f 46 69 66 6f 57 72 69  .case OP_FifoWri
217a0 74 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  te: {        /* 
217b0 69 6e 31 20 2a 2f 0a 20 20 70 2d 3e 73 46 69 66  in1 */.  p->sFif
217c0 6f 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 66 28  o.db = db;.  if(
217d0 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
217e0 50 75 73 68 28 26 70 2d 3e 73 46 69 66 6f 2c 20  Push(&p->sFifo, 
217f0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
21800 6c 75 65 28 70 49 6e 31 29 29 3d 3d 53 51 4c 49  lue(pIn1))==SQLI
21810 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
21820 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
21830 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21840 4f 70 63 6f 64 65 3a 20 46 69 66 6f 52 65 61 64  Opcode: FifoRead
21850 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21860 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
21870 61 64 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  ad a single inte
21880 67 65 72 20 66 72 6f 6d 20 74 68 65 20 46 69 66  ger from the Fif
21890 6f 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a 2a  o.  Store that.*
218a0 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  * integer in reg
218b0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 0a 2a 2a  ister P1..** .**
218c0 20 49 66 20 74 68 65 20 46 69 66 6f 20 69 73 20   If the Fifo is 
218d0 65 6d 70 74 79 20 6a 75 6d 70 20 74 6f 20 50 32  empty jump to P2
218e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 69 66  ..*/.case OP_Fif
218f0 6f 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 20  oRead: {        
21900 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48   /* jump */.  CH
21910 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
21920 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
21930 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
21940 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
21950 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
21960 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 53  pOp->p1];.  MemS
21970 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
21980 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 69 66 28   MEM_Int);.  if(
21990 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
219a0 50 6f 70 28 26 70 2d 3e 73 46 69 66 6f 2c 20 26  Pop(&p->sFifo, &
219b0 70 4f 75 74 2d 3e 75 2e 69 29 3d 3d 53 51 4c 49  pOut->u.i)==SQLI
219c0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
219d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
219e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
219f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21a00 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 2f 2a 20  OMIT_TRIGGER./* 
21a10 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50  Opcode: ContextP
21a20 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a  ush * * * .**.**
21a30 20 53 61 76 65 20 74 68 65 20 63 75 72 72 65 6e   Save the curren
21a40 74 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20 73  t Vdbe context s
21a50 75 63 68 20 74 68 61 74 20 69 74 20 63 61 6e 20  uch that it can 
21a60 62 65 20 72 65 73 74 6f 72 65 64 20 62 79 20 61  be restored by a
21a70 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a 2a 20 6f   ContextPop.** o
21a80 70 63 6f 64 65 2e 20 54 68 65 20 63 6f 6e 74 65  pcode. The conte
21a90 78 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61  xt stores the la
21aa0 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64  st insert row id
21ab0 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65  , the last state
21ac0 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a 2a 20 63  ment change.** c
21ad0 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75  ount, and the cu
21ae0 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
21af0 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f  change count..*/
21b00 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74  .case OP_Context
21b10 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74 20 69 20  Push: {.  int i 
21b20 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  = p->contextStac
21b30 6b 54 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74 65 78  kTop++;.  Contex
21b40 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20  t *pContext;..  
21b50 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a  assert( i>=0 );.
21b60 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68 69    /* FIX ME: Thi
21b70 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c 6f  s should be allo
21b80 63 61 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  cated as part of
21b90 20 74 68 65 20 76 64 62 65 20 61 74 20 63 6f 6d   the vdbe at com
21ba0 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20 69  pile-time */.  i
21bb0 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78 74  f( i>=p->context
21bc0 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20 20  StackDepth ){.  
21bd0 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63    p->contextStac
21be0 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20 20  kDepth = i+1;.  
21bf0 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63    p->contextStac
21c00 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61  k = sqlite3DbRea
21c10 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20 70  llocOrFree(db, p
21c20 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c 0a  ->contextStack,.
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
21c60 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29 29  (Context)*(i+1))
21c70 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f 6e  ;.    if( p->con
21c80 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20 67  textStack==0 ) g
21c90 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
21ca0 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d    pContext = &p-
21cb0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69 5d  >contextStack[i]
21cc0 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61  ;.  pContext->la
21cd0 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
21ce0 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e 74  stRowid;.  pCont
21cf0 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ext->nChange = p
21d00 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 43 6f  ->nChange;.  pCo
21d10 6e 74 65 78 74 2d 3e 73 46 69 66 6f 20 3d 20 70  ntext->sFifo = p
21d20 2d 3e 73 46 69 66 6f 3b 0a 20 20 73 71 6c 69 74  ->sFifo;.  sqlit
21d30 65 33 56 64 62 65 46 69 66 6f 49 6e 69 74 28 26  e3VdbeFifoInit(&
21d40 70 2d 3e 73 46 69 66 6f 2c 20 64 62 29 3b 0a 20  p->sFifo, db);. 
21d50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21d60 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70  code: ContextPop
21d70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65   * * * .**.** Re
21d80 73 74 6f 72 65 20 74 68 65 20 56 64 62 65 20 63  store the Vdbe c
21d90 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20 73 74  ontext to the st
21da0 61 74 65 20 69 74 20 77 61 73 20 69 6e 20 77 68  ate it was in wh
21db0 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68 20 77  en contextPush w
21dc0 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75  as last.** execu
21dd0 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65 78 74  ted. The context
21de0 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74   stores the last
21df0 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20   insert row id, 
21e00 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65  the last stateme
21e10 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  nt.** change cou
21e20 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72  nt, and the curr
21e30 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68  ent statement ch
21e40 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63  ange count..*/.c
21e50 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f  ase OP_ContextPo
21e60 70 3a 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a  p: {.  Context *
21e70 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63  pContext = &p->c
21e80 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70 2d  ontextStack[--p-
21e90 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70  >contextStackTop
21ea0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ];.  assert( p->
21eb0 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 3e  contextStackTop>
21ec0 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73 74  =0 );.  db->last
21ed0 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65 78 74  Rowid = pContext
21ee0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
21ef0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f 6e  ->nChange = pCon
21f00 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  text->nChange;. 
21f10 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
21f20 43 6c 65 61 72 28 26 70 2d 3e 73 46 69 66 6f 29  Clear(&p->sFifo)
21f30 3b 0a 20 20 70 2d 3e 73 46 69 66 6f 20 3d 20 70  ;.  p->sFifo = p
21f40 43 6f 6e 74 65 78 74 2d 3e 73 46 69 66 6f 3b 0a  Context->sFifo;.
21f50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
21f60 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
21f70 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
21f80 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
21f90 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
21fa0 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
21fb0 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
21fc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
21fd0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
21fe0 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
21ff0 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63 75  aximum of its cu
22000 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61  rrent value.** a
22010 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
22020 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
22030 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
22040 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
22050 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
22060 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
22070 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
22080 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
22090 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
220a0 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
220b0 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
220c0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
220d0 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
220e0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
220f0 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
22100 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
22110 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
22120 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
22130 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
22140 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
22150 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
22160 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
22170 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
22180 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
22190 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
221a0 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
221b0 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
221c0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
221d0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
221e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
221f0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
22200 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
22210 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
22220 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
22230 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
22240 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
22250 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
22260 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22270 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
22280 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
22290 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
222a0 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
222b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
222c0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
222d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
222e0 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
222f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
22300 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
22310 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
22320 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
22330 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
22340 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
22350 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
22360 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
22370 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
22380 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
22390 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
223a0 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
223b0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
223c0 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
223d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
223e0 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
223f0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
22400 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
22410 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
22420 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
22430 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
22440 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22450 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
22460 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
22470 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
22480 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20  r P1 is exactly 
22490 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
224a0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
224b0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
224c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
224d0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
224e0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
224f0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
22500 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
22510 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
22520 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
22530 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
22540 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22550 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
22560 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
22570 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
22580 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
22590 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
225a0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
225b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
225c0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
225d0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
225e0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
225f0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
22600 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
22610 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
22620 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
22630 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
22640 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
22650 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
22660 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
22670 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
22680 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
22690 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
226a0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
226b0 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
226c0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
226d0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
226e0 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
226f0 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
22700 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  nt n = pOp->p5;.
22710 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
22720 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a 20 20 73  pMem, *pRec;.  s
22730 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
22740 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
22750 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
22760 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
22770 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65    pRec = &p->aMe
22780 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
22790 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
227a0 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
227b0 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
227c0 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
227d0 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pRec++){.    apV
227e0 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
227f0 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
22800 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pRec, encoding);
22810 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63  .  }.  ctx.pFunc
22820 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
22830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22840 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
22850 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63  <=p->nMem );.  c
22860 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
22870 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
22880 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
22890 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
228a0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
228b0 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e  .s.z = 0;.  ctx.
228c0 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  s.zMalloc = 0;. 
228d0 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
228e0 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
228f0 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
22900 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
22910 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
22920 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
22930 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
22940 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
22950 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
22960 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22970 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
22980 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
22990 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
229a0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
229b0 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
229c0 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
229d0 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
229e0 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
229f0 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
22a00 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
22a10 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
22a20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
22a30 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
22a40 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
22a50 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
22a60 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
22a70 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
22a80 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
22a90 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61  (&ctx.s);.  brea
22aa0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22ab0 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
22ac0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
22ad0 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
22ae0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
22af0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
22b00 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
22b10 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
22b20 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
22b30 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
22b40 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
22b50 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
22b60 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
22b70 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22b80 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
22b90 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
22ba0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
22bb0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
22bc0 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
22bd0 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
22be0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
22bf0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
22c00 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
22c10 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
22c20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
22c30 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
22c40 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
22c50 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
22c60 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
22c70 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
22c80 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
22c90 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22ca0 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
22cb0 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
22cc0 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
22cd0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
22ce0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22cf0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
22d00 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
22d10 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
22d20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22d30 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
22d40 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
22d50 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
22d60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
22d70 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
22d80 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
22d90 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22da0 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73 71  _ERROR ){.    sq
22db0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
22dc0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
22dd0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
22de0 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
22df0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
22e00 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
22e10 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
22e20 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
22e30 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
22e40 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
22e50 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
22e60 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
22e70 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
22e80 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e  ;.}...#if !defin
22e90 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22ea0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
22eb0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22ec0 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
22ed0 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
22ee0 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
22ef0 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
22f00 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
22f10 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
22f20 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
22f30 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
22f40 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
22f50 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
22f60 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
22f70 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
22f80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
22f90 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c  uum: {.  if( sql
22fa0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
22fb0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22fc0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20  ue_to_misuse; . 
22fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
22fe0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
22ff0 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73  sg, db);.  if( s
23000 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
23010 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
23020 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
23030 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
23040 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
23050 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
23060 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
23070 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
23080 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
23090 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
230a0 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
230b0 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
230c0 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
230d0 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
230e0 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
230f0 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
23100 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
23110 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
23120 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
23130 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
23140 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
23150 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
23160 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23170 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
23180 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23190 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
231a0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
231b0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
231c0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
231d0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
231e0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
231f0 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
23200 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
23210 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
23220 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
23230 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
23240 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
23250 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
23260 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
23270 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
23280 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
23290 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
232a0 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
232b0 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
232c0 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
232d0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
232e0 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
232f0 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
23300 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
23310 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
23320 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
23330 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
23340 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
23350 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
23360 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
23370 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
23380 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
23390 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
233a0 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
233b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
233c0 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
233d0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
233e0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
233f0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
23400 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
23410 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
23420 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
23430 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
23440 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
23450 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
23460 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
23470 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
23480 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
23490 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
234a0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
234b0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
234c0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
234d0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
234e0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
234f0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
23500 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 20  **.** If P1 is  
23510 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
23520 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
23530 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
23540 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
23550 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
23560 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
23570 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
23580 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
23590 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
235a0 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
235b0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
235c0 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
235d0 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
235e0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
235f0 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
23600 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
23610 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
23620 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
23630 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
23640 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
23650 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
23660 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
23670 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
23680 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
23690 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
236a0 3b 20 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c  ; .  u8 isWriteL
236b0 6f 63 6b 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  ock = pOp->p3;. 
236c0 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
236d0 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
236e0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
236f0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31  reeMask & (1<<p1
23700 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
23710 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
23720 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
23730 3d 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==1 );.  rc = sq
23740 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
23750 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
23760 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
23770 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66  WriteLock);.  if
23780 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  ( rc==SQLITE_LOC
23790 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  KED ){.    const
237a0 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
237b0 70 34 2e 7a 3b 0a 20 20 20 20 73 71 6c 69 74 65  p4.z;.    sqlite
237c0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
237d0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
237e0 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
237f0 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
23800 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
23810 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23820 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
23830 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23840 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23850 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
23860 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
23870 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
23880 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
23890 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
238a0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
238b0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
238c0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
238d0 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
238e0 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
238f0 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
23900 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
23910 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
23920 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
23930 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
23940 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
23950 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
23960 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 73  hod. If it is, s
23970 65 74 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20  et the.** error 
23980 63 6f 64 65 20 74 6f 20 53 51 4c 49 54 45 5f 4c  code to SQLITE_L
23990 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
239a0 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71  P_VBegin: {.  sq
239b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
239c0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
239d0 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
239e0 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
239f0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74  Vtab);.  if( pVt
23a00 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ab ){.    sqlite
23a10 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
23a20 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
23a30 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
23a40 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
23a50 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
23a60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23a70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23a80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23a90 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
23aa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
23ab0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
23ac0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
23ad0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
23ae0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
23af0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
23b00 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
23b10 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
23b20 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
23b30 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23b40 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
23b50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23b60 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
23b70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
23b80 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
23b90 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
23ba0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23bb0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23bc0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23bd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23be0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
23bf0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
23c00 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
23c10 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
23c20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
23c30 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
23c40 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
23c50 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
23c60 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23c70 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
23c80 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
23c90 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
23ca0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
23cb0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
23cc0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
23cd0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
23ce0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
23cf0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
23d00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23d10 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
23d20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23d30 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
23d40 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
23d50 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
23d60 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
23d70 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
23d80 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
23d90 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
23da0 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
23db0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
23dc0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
23dd0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
23de0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
23df0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
23e00 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
23e10 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
23e20 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
23e30 2a 70 43 75 72 20 3d 20 30 3b 0a 20 20 73 71 6c  *pCur = 0;.  sql
23e40 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
23e50 20 2a 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20   *pVtabCursor = 
23e60 30 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  0;..  sqlite3_vt
23e70 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d  ab *pVtab = pOp-
23e80 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c  >p4.pVtab;.  sql
23e90 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
23ea0 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
23eb0 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
23ec0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
23ed0 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64  rt(pVtab && pMod
23ee0 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ule);.  if( sqli
23ef0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
23f00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
23f10 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72  e_to_misuse;.  r
23f20 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
23f30 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
23f40 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74  Cursor);.  sqlit
23f50 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
23f60 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
23f70 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
23f80 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
23f90 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
23fa0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
23fb0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
23fc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
23fd0 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  use;.  if( SQLIT
23fe0 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK==rc ){.    
23ff0 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
24000 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
24010 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
24020 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d      pVtabCursor-
24030 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
24040 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
24050 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  se vdbe cursor o
24060 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75  bject */.    pCu
24070 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
24080 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  or(p, pOp->p1, &
24090 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b  pOp[-1], -1, 0);
240a0 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
240b0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
240c0 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
240d0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
240e0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
240f0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
24100 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
24110 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
24120 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
24130 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
24140 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
24150 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
24160 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
24170 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
24180 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
24190 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
241a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
241b0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
241c0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
241d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
241e0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
241f0 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
24200 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
24210 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
24220 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
24230 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
24240 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
24250 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
24260 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
24270 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
24280 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
24290 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
242a0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
242b0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
242c0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
242d0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
242e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
242f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
24300 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
24310 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
24320 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
24330 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
24340 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
24350 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
24360 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
24370 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
24380 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
24390 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
243a0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
243b0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
243c0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
243d0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
243e0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
243f0 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
24400 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
24410 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
24420 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
24430 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
24440 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
24450 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
24460 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
24470 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
24480 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
24490 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
244a0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
244b0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
244c0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
244d0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
244e0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
244f0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
24500 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
24510 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
24520 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
24530 2a 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61 4d  *pQuery = &p->aM
24540 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d  em[pOp->p3];.  M
24550 65 6d 20 2a 70 41 72 67 63 20 3d 20 26 70 51 75  em *pArgc = &pQu
24560 65 72 79 5b 31 5d 3b 0a 20 20 73 71 6c 69 74 65  ery[1];.  sqlite
24570 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
24580 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
24590 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
245a0 62 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  b;..  VdbeCursor
245b0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
245c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52  r[pOp->p1];..  R
245d0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
245e0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
245f0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
24600 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
24610 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
24620 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
24630 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
24640 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
24650 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
24660 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
24670 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
24680 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
24690 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
246a0 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
246b0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
246c0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
246d0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
246e0 20 20 6e 41 72 67 20 3d 20 70 41 72 67 63 2d 3e    nArg = pArgc->
246f0 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20  u.i;.  iQuery = 
24700 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
24710 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
24720 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
24730 20 20 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 20    {.    int res 
24740 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  = 0;.    int i;.
24750 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20      Mem **apArg 
24760 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
24770 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
24780 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
24790 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
247a0 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f  [i+1];.      sto
247b0 72 65 54 79 70 65 49 6e 66 6f 28 61 70 41 72 67  reTypeInfo(apArg
247c0 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a  [i], 0);.    }..
247d0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
247e0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
247f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24800 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c  _misuse;.    sql
24810 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74  ite3VtabLock(pVt
24820 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  ab);.    p->inVt
24830 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
24840 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
24850 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72  xFilter(pVtabCur
24860 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  sor, iQuery, pOp
24870 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
24880 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  Arg);.    p->inV
24890 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
248a0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
248b0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
248c0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
248d0 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
248e0 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45  g;.    pVtab->zE
248f0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 73  rrMsg = 0;.    s
24900 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
24910 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  (db, pVtab);.   
24920 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
24930 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
24940 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
24950 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
24960 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
24970 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
24980 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24990 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20  _to_misuse;..   
249a0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
249b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
249c0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
249d0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
249e0 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  0;..  break;.}.#
249f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24a00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24a10 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
24a20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24a30 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
24a40 3a 20 56 52 6f 77 69 64 20 50 31 20 50 32 20 2a  : VRowid P1 P2 *
24a50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
24a60 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
24a70 32 20 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  2  the rowid of.
24a80 2a 2a 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  ** the virtual-t
24a90 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 50 31  able that the P1
24aa0 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
24ab0 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61 73 65 20  ing to..*/.case 
24ac0 4f 50 5f 56 52 6f 77 69 64 3a 20 7b 20 20 20 20  OP_VRowid: {    
24ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
24ae0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
24af0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
24b00 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
24b10 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
24b20 6f 64 75 6c 65 3b 0a 20 20 73 71 6c 69 74 65 5f  odule;.  sqlite_
24b30 69 6e 74 36 34 20 69 52 6f 77 3b 0a 20 20 56 64  int64 iRow;.  Vd
24b40 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
24b50 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24b60 31 5d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  1];..  assert( p
24b70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
24b80 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
24b90 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
24ba0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
24bb0 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
24bc0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
24bd0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
24be0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
24bf0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
24c00 77 69 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  wid );.  if( sql
24c10 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
24c20 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
24c30 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
24c40 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
24c50 6f 77 69 64 28 70 43 75 72 2d 3e 70 56 74 61 62  owid(pCur->pVtab
24c60 43 75 72 73 6f 72 2c 20 26 69 52 6f 77 29 3b 0a  Cursor, &iRow);.
24c70 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
24c80 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
24c90 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
24ca0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
24cb0 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
24cc0 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
24cd0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
24ce0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24cf0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 4d 65  _to_misuse;.  Me
24d00 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
24d10 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70  t, MEM_Int);.  p
24d20 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 52 6f 77 3b  Out->u.i = iRow;
24d30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
24d40 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
24d50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
24d60 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
24d70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
24d80 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
24d90 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
24da0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
24db0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
24dc0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
24dd0 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
24de0 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
24df0 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
24e00 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
24e10 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
24e20 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
24e30 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
24e40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
24e50 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
24e60 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
24e70 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
24e80 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
24e90 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
24ea0 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
24eb0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
24ec0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24ed0 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
24ee0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24ef0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
24f00 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
24f10 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
24f20 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24f30 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
24f40 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
24f50 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
24f60 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
24f70 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
24f80 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
24f90 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
24fa0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24fb0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
24fc0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
24fd0 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
24fe0 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
24ff0 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
25000 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
25010 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
25020 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
25030 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
25040 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
25050 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
25060 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
25070 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
25080 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
25090 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
250a0 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
250b0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
250c0 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
250d0 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
250e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
250f0 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
25100 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
25110 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
25120 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
25130 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
25140 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
25150 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25160 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
25170 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
25180 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25190 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
251a0 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
251b0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
251c0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
251d0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
251e0 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
251f0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20  >zErrMsg = 0;.. 
25200 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
25210 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
25220 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
25230 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
25240 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
25250 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
25260 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
25270 63 75 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cured to ensure 
25280 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
25290 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
252a0 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
252b0 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
252c0 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
252d0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
252e0 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
252f0 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
25300 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
25310 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
25320 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
25330 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
25340 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50  Context.s);.  UP
25350 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
25360 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
25370 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
25380 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  (db) ){.    goto
25390 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
253a0 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
253b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
253c0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
253d0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
253e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
253f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25400 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25410 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
25420 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25430 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
25440 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
25450 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
25460 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
25470 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
25480 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
25490 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
254a0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
254b0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
254c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
254d0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
254e0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
254f0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
25500 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
25510 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
25520 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
25530 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
25540 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
25550 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
25560 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
25570 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
25580 6e 74 20 72 65 73 20 3d 20 30 3b 0a 0a 20 20 56  nt res = 0;..  V
25590 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
255a0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
255b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
255c0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
255d0 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
255e0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
255f0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
25600 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
25610 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
25620 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
25630 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
25640 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
25650 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
25660 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
25670 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
25680 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
25690 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
256a0 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
256b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
256c0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
256d0 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
256e0 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
256f0 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
25700 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
25710 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
25720 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
25730 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
25740 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
25750 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
25760 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
25770 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
25780 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
25790 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
257a0 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
257b0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
257c0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
257d0 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
257e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
257f0 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c  to_misuse;.  sql
25800 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74  ite3VtabLock(pVt
25810 61 62 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  ab);.  p->inVtab
25820 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
25830 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
25840 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
25850 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
25860 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73  bMethod = 0;.  s
25870 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
25880 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
25890 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
258a0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
258b0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
258c0 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
258d0 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
258e0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
258f0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
25900 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
25910 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
25920 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  sor);.  }.  if( 
25930 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
25940 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
25950 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
25960 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
25970 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
25980 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
25990 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70  P2 */.    pc = p
259a0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
259b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
259c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
259d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
259e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
259f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25a00 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
25a10 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
25a20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
25a30 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
25a40 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
25a50 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
25a60 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
25a70 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
25a80 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
25a90 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
25aa0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
25ab0 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
25ac0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
25ad0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
25ae0 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
25af0 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
25b00 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
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 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
25b40 61 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ame = &p->aMem[p
25b50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25b60 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
25b70 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
25b80 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
25b90 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
25ba0 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 4e 61  .  Stringify(pNa
25bb0 6d 65 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a  me, encoding);..
25bc0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
25bd0 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
25be0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
25bf0 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33  isuse;.  sqlite3
25c00 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
25c10 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
25c20 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
25c30 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
25c40 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
25c50 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
25c60 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
25c70 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
25c80 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
25c90 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  sg = 0;.  sqlite
25ca0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
25cb0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71  pVtab);.  if( sq
25cc0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
25cd0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
25ce0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
25cf0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
25d00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25d10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25d20 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
25d30 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
25d40 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
25d50 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
25d60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
25d70 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
25d80 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
25d90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
25da0 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
25db0 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
25dc0 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
25dd0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
25de0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
25df0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
25e00 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
25e10 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
25e20 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
25e30 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
25e40 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
25e50 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
25e60 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
25e70 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
25e80 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
25e90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
25ea0 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
25eb0 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
25ec0 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
25ed0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
25ee0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
25ef0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
25f00 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
25f10 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
25f20 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
25f30 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
25f40 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
25f50 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
25f60 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
25f70 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
25f80 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
25f90 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
25fa0 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
25fb0 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
25fc0 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
25fd0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
25fe0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
25ff0 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
26000 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
26010 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
26020 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
26030 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
26040 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
26050 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
26060 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
26070 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
26080 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
26090 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
260a0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
260b0 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
260c0 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
260d0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
260e0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
260f0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
26100 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
26110 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
26120 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
26130 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
26140 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
26150 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
26160 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
26170 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
26180 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
26190 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
261a0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
261b0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28  ule *pModule = (
261c0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
261d0 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
261e0 0a 20 20 69 6e 74 20 6e 41 72 67 20 3d 20 70 4f  .  int nArg = pO
261f0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
26200 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26210 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70  _VTAB );.  if( p
26220 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 3d  Module->xUpdate=
26230 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
26240 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
26250 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 72 65 61  ErrMsg, db, "rea
26260 64 2d 6f 6e 6c 79 20 74 61 62 6c 65 22 29 3b 0a  d-only table");.
26270 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26280 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ERROR;.  }else{.
26290 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73      int i;.    s
262a0 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
262b0 64 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41  d;.    Mem **apA
262c0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
262d0 20 20 20 4d 65 6d 20 2a 70 58 20 3d 20 26 70 2d     Mem *pX = &p-
262e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
262f0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
26300 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
26310 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
26320 58 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 41  X, 0);.      apA
26330 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
26340 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
26350 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
26360 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
26370 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
26380 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74  isuse;.    sqlit
26390 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62  e3VtabLock(pVtab
263a0 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
263b0 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
263c0 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
263d0 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 73 71   &rowid);.    sq
263e0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
263f0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
26400 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
26410 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
26420 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
26430 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
26440 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
26450 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
26460 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
26470 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
26480 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
26490 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20      if( pOp->p1 
264a0 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
264b0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
264c0 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
264d0 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
264e0 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
264f0 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
26500 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
26510 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  d;.    }.    p->
26520 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20  nChange++;.  }. 
26530 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
26540 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
26550 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
26560 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
26570 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
26580 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
26590 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
265a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
265b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
265c0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
265d0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
265e0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
265f0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
26600 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
26610 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
26620 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 31  ease */.  int p1
26630 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 69   = pOp->p1; .  i
26640 6e 74 20 6e 50 61 67 65 3b 0a 20 20 50 61 67 65  nt nPage;.  Page
26650 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
26660 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62  te3BtreePager(db
26670 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29 3b 0a  ->aDb[p1].pBt);.
26680 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50  .  rc = sqlite3P
26690 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70 50  agerPagecount(pP
266a0 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a 20  ager, &nPage);. 
266b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
266c0 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  OK ){.    pOut->
266d0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
266e0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
266f0 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62 72   nPage;.  }.  br
26700 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
26710 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26720 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f  IT_TRACE./* Opco
26730 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20  de: Trace * * * 
26740 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  P4 *.**.** If tr
26750 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
26760 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
26770 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
26780 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
26790 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
267a0 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
267b0 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
267c0 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
267d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65  */.case OP_Trace
267e0 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
267f0 34 2e 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 64  4.z ){.    if( d
26800 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20  b->xTrace ){.   
26810 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
26820 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 4f 70  ->pTraceArg, pOp
26830 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23  ->p4.z);.    }.#
26840 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26850 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e  UG.    if( (db->
26860 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
26870 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20  qlTrace)!=0 ){. 
26880 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75       sqlite3Debu
26890 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61  gPrintf("SQL-tra
268a0 63 65 3a 20 25 73 5c 6e 22 2c 20 70 4f 70 2d 3e  ce: %s\n", pOp->
268b0 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  p4.z);.    }.#en
268c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
268d0 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65  BUG */.  }.  bre
268e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ak;.}.#endif.../
268f0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
26900 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
26910 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
26920 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
26930 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
26940 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
26950 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
26960 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
26970 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
26980 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
26990 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
269a0 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
269b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
269c0 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
269d0 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
269e0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
269f0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
26a00 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
26a10 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
26a20 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
26a30 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
26a40 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
26a50 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
26a60 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
26a70 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
26a80 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
26a90 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
26aa0 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65 61  xplain */.  brea
26ab0 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
26ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26b00 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
26b10 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
26b20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
26b30 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
26b40 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
26b50 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
26b60 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
26b70 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
26b80 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
26b90 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
26ba0 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
26bb0 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
26bc0 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
26bd0 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
26be0 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
26bf0 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
26c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26c40 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
26c50 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
26c60 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
26c70 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65  elapsed = sqlite
26c80 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72  3Hwtime() - star
26c90 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
26ca0 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b  cles += elapsed;
26cb0 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b  .      pOp->cnt+
26cc0 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20  +;.#if 0.       
26cd0 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c   fprintf(stdout,
26ce0 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70   "%10llu ", elap
26cf0 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71  sed);.        sq
26d00 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
26d10 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c  (stdout, origPc,
26d20 20 26 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63 5d   &p->aOp[origPc]
26d30 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
26d40 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
26d50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
26d60 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
26d70 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
26d80 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
26d90 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
26da0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
26db0 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
26dc0 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
26dd0 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
26de0 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
26df0 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
26e00 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
26e10 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
26e20 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
26e30 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
26e40 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
26e50 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
26e60 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
26e70 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
26e80 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e  pc>=-1 && pc<p->
26e90 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  nOp );..#ifdef S
26ea0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
26eb0 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a  if( p->trace ){.
26ec0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20        if( rc!=0 
26ed0 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61  ) fprintf(p->tra
26ee0 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29  ce,"rc=%d\n",rc)
26ef0 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72  ;.      if( opPr
26f00 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
26f10 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
26f20 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
26f30 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
26f40 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  , pOp->p2, pOut)
26f50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
26f60 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26  if( opProperty &
26f70 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20   OPFLG_OUT3 ){. 
26f80 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
26f90 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70  race(p->trace, p
26fa0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
26fb0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
26fc0 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
26fd0 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
26fe0 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
26ff0 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
27000 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
27010 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
27020 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
27030 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
27040 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
27050 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
27060 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
27070 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
27080 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
27090 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
270a0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
270b0 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
270c0 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64   rc;.  sqlite3Vd
270d0 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28  beHalt(p);.  if(
270e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc==SQLITE_IOER
270f0 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61  R_NOMEM ) db->ma
27100 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
27110 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
27120 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20  ROR;..  /* This 
27130 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
27140 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
27150 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
27160 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
27170 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
27180 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
27190 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
271a0 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
271b0 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69  e_return:.  sqli
271c0 74 65 33 42 74 72 65 65 4d 75 74 65 78 41 72 72  te3BtreeMutexArr
271d0 61 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74  ayLeave(&p->aMut
271e0 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  ex);.  return rc
271f0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
27200 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67  here if a string
27210 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20   or blob larger 
27220 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f  than SQLITE_MAX_
27230 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65  LENGTH.  ** is e
27240 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f  ncountered..  */
27250 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69  .too_big:.  sqli
27260 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27270 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73  >zErrMsg, db, "s
27280 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
27290 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20  o big");.  rc = 
272a0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20  SQLITE_TOOBIG;. 
272b0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
272c0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
272d0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d  p to here if a m
272e0 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20  alloc() fails.. 
272f0 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62   */.no_mem:.  db
27300 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
27310 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74   1;.  sqlite3Set
27320 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
27330 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20  sg, db, "out of 
27340 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d  memory");.  rc =
27350 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
27360 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
27370 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
27380 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
27390 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
273a0 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  rror..  */.abort
273b0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a  _due_to_misuse:.
273c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
273d0 53 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  SUSE;.  /* Fall 
273e0 74 68 72 75 20 69 6e 74 6f 20 61 62 6f 72 74 5f  thru into abort_
273f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a  due_to_error */.
27400 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
27410 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
27420 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
27430 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
27440 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
27450 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
27460 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
27470 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
27480 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
27490 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
274a0 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
274b0 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
274c0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
274d0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
274e0 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
274f0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
27500 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
27510 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
27520 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
27530 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
27540 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
27550 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68  mp to here if th
27560 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  e sqlite3_interr
27570 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74  upt() API sets t
27580 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a  he interrupt.  *
27590 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f  * flag..  */.abo
275a0 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
275b0 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64  upt:.  assert( d
275c0 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
275d0 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51  ted );.  rc = SQ
275e0 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
275f0 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
27600 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
27610 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
27620 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
27630 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f  rrStr(rc));.  go
27640 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
27650 6c 74 3b 0a 7d 0a                                lt;.}.