/ Hex Artifact Content
Login

Artifact a548d1dd6c5d99b2bd38e522aba2fa401340c99c:


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 37 31 20 32 30 30 38  e.c,v 1.771 2008
0850: 2f 30 38 2f 30 31 20 32 30 3a 31 30 3a 30 38 20  /08/01 20:10:08 
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 52 65  #endif../*.** Re
1080: 6c 65 61 73 65 20 74 68 65 20 6d 65 6d 6f 72 79  lease the memory
1090: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
10a0: 20 61 20 72 65 67 69 73 74 65 72 2e 20 20 54 68   a register.  Th
10b0: 69 73 0a 2a 2a 20 6c 65 61 76 65 73 20 74 68 65  is.** leaves the
10c0: 20 4d 65 6d 2e 66 6c 61 67 73 20 66 69 65 6c 64   Mem.flags field
10d0: 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74   in an inconsist
10e0: 65 6e 74 20 73 74 61 74 65 2e 0a 2a 2f 0a 23 64  ent state..*/.#d
10f0: 65 66 69 6e 65 20 52 65 6c 65 61 73 65 28 50 29  efine Release(P)
1100: 20 69 66 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d   if((P)->flags&M
1110: 45 4d 5f 44 79 6e 29 7b 20 73 71 6c 69 74 65 33  EM_Dyn){ sqlite3
1120: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 50  VdbeMemRelease(P
1130: 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ); }../*.** Conv
1140: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1150: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1160: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1170: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1180: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1190: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
11a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
11b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
11c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
11d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
11e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
11f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1200: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29  tringify(P,enc))
1210: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1220: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1230: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1240: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1250: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1260: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1270: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1280: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1290: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
12a0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
12b0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
12c0: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
12d0: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
12e0: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
12f0: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1300: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1310: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1320: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1330: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1340: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1350: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1360: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1370: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1380: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1390: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13a0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
13b0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
13c0: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
13d0: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
13e0: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
13f0: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1400: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20   string into an 
1410: 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a  MEM_Dyn string..
1420: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68  */.#define Deeph
1430: 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20  emeralize(P) \. 
1440: 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67    if( ((P)->flag
1450: 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20  s&MEM_Ephem)!=0 
1460: 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69  \.       && sqli
1470: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
1480: 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f  iteable(P) ){ go
1490: 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a  to no_mem;}../*.
14a0: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56  ** Call sqlite3V
14b0: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
14c0: 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69  () on the suppli
14d0: 65 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d  ed value (type M
14e0: 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71  em*).** P if req
14f0: 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  uired..*/.#defin
1500: 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20  e ExpandBlob(P) 
1510: 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d  (((P)->flags&MEM
1520: 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64  _Zero)?sqlite3Vd
1530: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
1540: 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67  P):0)../*.** Arg
1550: 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74  ument pMem point
1560: 73 20 61 74 20 61 20 72 65 67 69 73 74 65 72 20  s at a register 
1570: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73  that will be pas
1580: 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72  sed to a.** user
1590: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
15a0: 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f  n or returned to
15b0: 20 74 68 65 20 75 73 65 72 20 61 73 20 74 68 65   the user as the
15c0: 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65   result of a que
15d0: 72 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  ry..** The secon
15e0: 64 20 61 72 67 75 6d 65 6e 74 2c 20 27 64 62 5f  d argument, 'db_
15f0: 65 6e 63 27 20 69 73 20 74 68 65 20 74 65 78 74  enc' is the text
1600: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
1610: 79 20 74 68 65 20 76 64 62 65 20 66 6f 72 0a 2a  y the vdbe for.*
1620: 2a 20 72 65 67 69 73 74 65 72 20 76 61 72 69 61  * register varia
1630: 62 6c 65 73 2e 20 20 54 68 69 73 20 72 6f 75 74  bles.  This rout
1640: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d 65  ine sets the pMe
1650: 6d 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65 6d 2d  m->enc and pMem-
1660: 3e 74 79 70 65 0a 2a 2a 20 76 61 72 69 61 62 6c  >type.** variabl
1670: 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 73  es used by the s
1680: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1690: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 64   routines..*/.#d
16a0: 65 66 69 6e 65 20 73 74 6f 72 65 54 79 70 65 49  efine storeTypeI
16b0: 6e 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72 65 54  nfo(A,B) _storeT
16c0: 79 70 65 49 6e 66 6f 28 41 29 0a 73 74 61 74 69  ypeInfo(A).stati
16d0: 63 20 76 6f 69 64 20 5f 73 74 6f 72 65 54 79 70  c void _storeTyp
16e0: 65 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d 29  eInfo(Mem *pMem)
16f0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
1700: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
1710: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1720: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1730: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1740: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1750: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1760: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1770: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1780: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1790: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
17a0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
17b0: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
17c0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
17d0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
17e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
17f0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
1800: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
1810: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1820: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1830: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
1840: 6f 70 65 72 74 69 65 73 20 6f 66 20 6f 70 63 6f  operties of opco
1850: 64 65 73 2e 20 20 54 68 65 20 4f 50 46 4c 47 5f  des.  The OPFLG_
1860: 49 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61 63 72  INITIALIZER macr
1870: 6f 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  o is.** created 
1880: 62 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  by mkopcodeh.awk
1890: 20 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74   during compilat
18a0: 69 6f 6e 2e 20 20 44 61 74 61 20 69 73 20 6f 62  ion.  Data is ob
18b0: 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 74  tained.** from t
18c0: 68 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c 6c  he comments foll
18d0: 6f 77 69 6e 67 20 74 68 65 20 22 63 61 73 65 20  owing the "case 
18e0: 4f 50 5f 78 78 78 78 3a 22 20 73 74 61 74 65 6d  OP_xxxx:" statem
18f0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69 73 20  ents in.** this 
1900: 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61 74 69  file.  .*/.stati
1910: 63 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  c unsigned char 
1920: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
1930: 20 3d 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c   = OPFLG_INITIAL
1940: 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  IZER;../*.** Ret
1950: 75 72 6e 20 74 72 75 65 20 69 66 20 61 6e 20 6f  urn true if an o
1960: 70 63 6f 64 65 20 68 61 73 20 61 6e 79 20 6f 66  pcode has any of
1970: 20 74 68 65 20 4f 50 46 4c 47 5f 78 78 78 20 70   the OPFLG_xxx p
1980: 72 6f 70 65 72 74 69 65 73 0a 2a 2a 20 73 70 65  roperties.** spe
1990: 63 69 66 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a  cified by mask..
19a0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
19b0: 62 65 4f 70 63 6f 64 65 48 61 73 50 72 6f 70 65  beOpcodeHasPrope
19c0: 72 74 79 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20  rty(int opcode, 
19d0: 69 6e 74 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73  int mask){.  ass
19e0: 65 72 74 28 20 6f 70 63 6f 64 65 3e 30 20 26 26  ert( opcode>0 &&
19f0: 20 6f 70 63 6f 64 65 3c 73 69 7a 65 6f 66 28 6f   opcode<sizeof(o
1a00: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29  pcodeProperty) )
1a10: 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f  ;.  return (opco
1a20: 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64  deProperty[opcod
1a30: 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a  e]&mask)!=0;.}..
1a40: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 63  /*.** Allocate c
1a50: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1a60: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1a70: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1a80: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1a90: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1aa0: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 43  ory..*/.static C
1ab0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ac0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1ad0: 2c 20 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 0a  , .  int iCur, .
1ae0: 20 20 4f 70 20 2a 70 4f 70 2c 0a 20 20 69 6e 74    Op *pOp,.  int
1af0: 20 69 44 62 2c 20 0a 20 20 69 6e 74 20 69 73 42   iDb, .  int isB
1b00: 74 72 65 65 43 75 72 73 6f 72 0a 29 7b 0a 20 20  treeCursor.){.  
1b10: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1b20: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1b30: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1b40: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1b50: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1b60: 72 65 64 20 66 6f 72 20 74 68 69 73 20 43 75 72  red for this Cur
1b70: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b80: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1b90: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1ba0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bb0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bc0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1bd0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1be0: 20 2a 2a 20 43 75 72 73 6f 72 20 73 74 72 75 63   ** Cursor struc
1bf0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1c00: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1c10: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1c20: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1c30: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1c40: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1c50: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1c60: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1c70: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1c80: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1c90: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1ca0: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1cb0: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1cc0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1cd0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1ce0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1cf0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1d00: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1d10: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1d20: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1d30: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1d40: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1d50: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1d60: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1d70: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1d80: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1d90: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1da0: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1db0: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1dc0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1dd0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1de0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1df0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1e00: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1e10: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1e20: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1e30: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1e40: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1e50: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1e60: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1e70: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1e80: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1e90: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1ea0: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1eb0: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1ec0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1ed0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1ee0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63  .  /* If the opc
1ef0: 6f 64 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50  ode of pOp is OP
1f00: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20  _SetNumColumns, 
1f10: 74 68 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e  then pOp->p2 con
1f20: 74 61 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e  tains.  ** the n
1f30: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1f40: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 63  in the records c
1f50: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
1f60: 74 61 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e  table or.  ** in
1f70: 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1f80: 2e 20 55 73 65 20 74 68 69 73 20 74 6f 20 72 65  . Use this to re
1f90: 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1fa0: 74 68 65 20 0a 20 20 2a 2a 20 43 75 72 73 6f 72  the .  ** Cursor
1fb0: 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79 2e 0a  .aType[] array..
1fc0: 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c    */.  int nFiel
1fd0: 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  d = 0;.  if( pOp
1fe0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 74  ->opcode==OP_Set
1ff0: 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20 70 4f  NumColumns || pO
2000: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
2010: 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b 0a 20  enEphemeral ){. 
2020: 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
2030: 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  >p2;.  }.  nByte
2040: 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f 66   = .      sizeof
2050: 28 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20  (Cursor) + .    
2060: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
2070: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
2080: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
2090: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
20a0: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
20b0: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
20c0: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
20d0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
20e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
20f0: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
2100: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
2110: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
2120: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
2130: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
2140: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
2150: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
2160: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
2170: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 43  iCur] = pCx = (C
2180: 75 72 73 6f 72 20 2a 29 70 4d 65 6d 2d 3e 7a 3b  ursor *)pMem->z;
2190: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d  .    memset(pMem
21a0: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
21b0: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
21c0: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
21d0: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
21e0: 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a    if( nField ){.
21f0: 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65        pCx->aType
2200: 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d   = (u32 *)&pMem-
2210: 3e 7a 5b 73 69 7a 65 6f 66 28 43 75 72 73 6f 72  >z[sizeof(Cursor
2220: 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  )];.    }.    if
2230: 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20  ( isBtreeCursor 
2240: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43  ){.      pCx->pC
2250: 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f  ursor = (BtCurso
2260: 72 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  r *)&pMem->z[siz
2270: 65 6f 66 28 43 75 72 73 6f 72 29 2b 32 2a 6e 46  eof(Cursor)+2*nF
2280: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
2290: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
22a0: 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a  eturn pCx;.}../*
22b0: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
22c0: 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20  rt a value into 
22d0: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
22e0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63  entation if we c
22f0: 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68  an.** do so with
2300: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
2310: 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rmation.  In oth
2320: 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
2330: 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73   string.** looks
2340: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2350: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
2360: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  a number.  If it
2370: 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f   does not.** loo
2380: 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  k like a number,
2390: 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e   leave it alone.
23a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
23b0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
23c0: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b  nity(Mem *pRec){
23d0: 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c  .  if( (pRec->fl
23e0: 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c  ags & (MEM_Real|
23f0: 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a  MEM_Int))==0 ){.
2400: 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b      int realnum;
2410: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2420: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
2430: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 28  pRec);.    if( (
2440: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2450: 53 74 72 29 0a 20 20 20 20 20 20 20 20 20 26 26  Str).         &&
2460: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
2470: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e  (pRec->z, &realn
2480: 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29 20 29  um, pRec->enc) )
2490: 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61 6c 75  {.      i64 valu
24a0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
24b0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
24c0: 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54 45 5f  ng(pRec, SQLITE_
24d0: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
24e0: 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c   !realnum && sql
24f0: 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d  ite3Atoi64(pRec-
2500: 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a 20  >z, &value) ){. 
2510: 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69         pRec->u.i
2520: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2530: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2540: 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pRec, MEM_Int);
2550: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2560: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2570: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52 65 63  eMemRealify(pRec
2580: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2590: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
25a0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
25b0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
25c0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
25d0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25e0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2600: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2610: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2620: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2630: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2640: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2650: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2660: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2670: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2680: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2690: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
26a0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
26b0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
26c0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
26d0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26e0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26f0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2700: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2710: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2720: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2730: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2740: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2750: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2760: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2770: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2780: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2790: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
27a0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
27b0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
27c0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
27d0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27e0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27f0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2800: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2810: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2820: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2830: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2840: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2850: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2860: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2870: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2880: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2890: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
28a0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
28b0: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
28c0: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
28d0: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
28e0: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
28f0: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2900: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2910: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2920: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2930: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2940: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
2950: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2960: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
2970: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
2980: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
2990: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
29a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
29b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29c0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
29d0: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
29e0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
29f0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2a00: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2a10: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2a20: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2a30: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a60: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a70: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a80: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a90: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2aa0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
2ab0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2ac0: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
2ad0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2ae0: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2af0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2b00: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2b10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a  e argument..**.*
2c40: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58 50  * This is an EXP
2c50: 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e  ERIMENTAL api an
2c60: 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20  d is subject to 
2c70: 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61  change or remova
2c80: 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  l..*/.int sqlite
2c90: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2ca0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2cb0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2cc0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2cd0: 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  Val;.  applyNume
2ce0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2cf0: 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e  );.  storeTypeIn
2d00: 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72  fo(pMem, 0);.  r
2d10: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2d20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2d30: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2d40: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2d50: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2d60: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2d70: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2d80: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2d90: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2da0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2db0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2dc0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2dd0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2de0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2df0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2e00: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2e10: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2e20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2e30: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2e40: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2e50: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2e60: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2e70: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2e80: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2e90: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2ea0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2eb0: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2ec0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2ed0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2ee0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2ef0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2f00: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2f10: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2f20: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2f30: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2f40: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2f50: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2f60: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2f70: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2f80: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2f90: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2fa0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fb0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2fc0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2fd0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2fe0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2ff0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3000: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3010: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3020: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3030: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3040: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3050: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3060: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3070: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3080: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3090: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
30a0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
30b0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
30c0: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
30d0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c      zCsr += strl
30e0: 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  en(zCsr);.    sq
30f0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3100: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3110: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3120: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
3130: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
3140: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3150: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3160: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3170: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3180: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3190: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
31a0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
31b0: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
31c0: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
31d0: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
31e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
31f0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3200: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3210: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3220: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3230: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3240: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
3250: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3260: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
3270: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
3280: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
3290: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29   += strlen(zCsr)
32a0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
32b0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
32c0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
32d0: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 6c 6c  (100, zCsr,"+%ll
32e0: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a  dz",pMem->u.i);.
32f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3300: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3310: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3320: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3330: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3340: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
3350: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
3360: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3370: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
3380: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
3390: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
33a0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
33b0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
33c0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
33d0: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
33e0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
33f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3400: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3410: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3420: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3430: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3440: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3450: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
3460: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3470: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
3480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3490: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
34a0: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
34b0: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
34c0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
34d0: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
34e0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
34f0: 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b 6b 5d   strlen(&zBuf[k]
3500: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3510: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3520: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3530: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3540: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3550: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3560: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3570: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3580: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
3590: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
35a0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
35b0: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
35c0: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
35d0: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
35e0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
35f0: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3600: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3610: 20 20 20 6b 20 2b 3d 20 73 74 72 6c 65 6e 28 26     k += strlen(&
3620: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3630: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3640: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3650: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3660: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3670: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3680: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3690: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
36a0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
36b0: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
36c0: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
36d0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
36e0: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
36f0: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
3700: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3710: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3720: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3730: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3740: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3750: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
3760: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3770: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3780: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
3790: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
37a0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
37b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
37c0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
37d0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
37e0: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
37f0: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
3800: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3810: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3820: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3830: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
3840: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
3850: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3860: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
3870: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
3880: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
3890: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
38a0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
38b0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
38c0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
38d0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
38e0: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
38f0: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3900: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3910: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3920: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3930: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
3940: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
3950: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
3960: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
3970: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3980: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
3990: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
39a0: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
39b0: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
39c0: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
39d0: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
39e0: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
39f0: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3a00: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3a10: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3a20: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3a30: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3a40: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
3a50: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
3a60: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
3a70: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
3a80: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
3a90: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
3aa0: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3ab0: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3ac0: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3ad0: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3ae0: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3af0: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3b00: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3b10: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3b20: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3b30: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3b40: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3b50: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3b60: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3b70: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3b80: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3b90: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3ba0: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3bb0: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3bc0: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3bd0: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3be0: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3bf0: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3c00: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3c10: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3c20: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3c30: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3c40: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3c50: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23  to_interrupt;..#
3c60: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3c70: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69  UG.static int fi
3c80: 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  leExists(sqlite3
3c90: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
3ca0: 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20   *zFile){.  int 
3cb0: 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  res = 0;.  int r
3cc0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3cd0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
3ce0: 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65  T.  /* If we are
3cf0: 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69   currently testi
3d00: 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68  ng IO errors, th
3d10: 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f  en do not call O
3d20: 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a  sAccess() to.  *
3d30: 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70  * test for the p
3d40: 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65  resence of zFile
3d50: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
3d60: 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74  e any IO error t
3d70: 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20  hat.  ** occurs 
3d80: 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  here will not be
3d90: 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69   reported, causi
3da0: 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66  ng the test to f
3db0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65  ail..  */.  exte
3dc0: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
3dd0: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b  o_error_pending;
3de0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69  .  if( sqlite3_i
3df0: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c  o_error_pending<
3e00: 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  =0 ).#endif.    
3e10: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
3e20: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
3e30: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43  File, SQLITE_ACC
3e40: 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73  ESS_EXISTS, &res
3e50: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73  );.  return (res
3e60: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3e70: 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  K);.}.#endif../*
3e80: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
3e90: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
3ea0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20  ogram as we can 
3eb0: 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a  then return..**.
3ec0: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61  ** sqlite3VdbeMa
3ed0: 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62  keReady() must b
3ee0: 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20  e called before 
3ef0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20  this routine in 
3f00: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73  order to.** clos
3f10: 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  e the program wi
3f20: 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61  th a final OP_Ha
3f30: 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70  lt and to set up
3f40: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a   the callbacks.*
3f50: 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  * and the error 
3f60: 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e  message pointer.
3f70: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20  .**.** Whenever 
3f80: 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20  a row or result 
3f90: 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
3fa0: 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  e, this routine 
3fb0: 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69  will either.** i
3fc0: 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74  nvoke the result
3fd0: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
3fe0: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72  ere is one) or r
3ff0: 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51  eturn with.** SQ
4000: 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20  LITE_ROW..**.** 
4010: 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  If an attempt is
4020: 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20   made to open a 
4030: 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c  locked database,
4040: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
4050: 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65  ne.** will eithe
4060: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73  r invoke the bus
4070: 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74  y callback (if t
4080: 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20  here is one) or 
4090: 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72  it will.** retur
40a0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a  n SQLITE_BUSY..*
40b0: 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
40c0: 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f   occurs, an erro
40d0: 72 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69  r message is wri
40e0: 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f  tten to memory o
40f0: 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20  btained.** from 
4100: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
4110: 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20   and p->zErrMsg 
4120: 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74  is made to point
4130: 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e   to that memory.
4140: 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f  .** The error co
4150: 64 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  de is stored in 
4160: 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72  p->rc and this r
4170: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53  outine returns S
4180: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4190: 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61  ** If the callba
41a0: 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20  ck ever returns 
41b0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
41c0: 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73  he program exits
41d0: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
41e0: 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20    There will be 
41f0: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
4200: 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66   but the p->rc f
4210: 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74  ield is.** set t
4220: 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61  o SQLITE_ABORT a
4230: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
4240: 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49  will return SQLI
4250: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4260: 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  A memory allocat
4270: 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73  ion error causes
4280: 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74   p->rc to be set
4290: 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   to SQLITE_NOMEM
42a0: 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75   and this.** rou
42b0: 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53  tine to return S
42c0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
42d0: 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65  ** Other fatal e
42e0: 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c  rrors return SQL
42f0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4300: 20 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74   After this rout
4310: 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64  ine has finished
4320: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e  , sqlite3VdbeFin
4330: 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62  alize() should b
4340: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65  e.** used to cle
4350: 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74  an up the mess t
4360: 68 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68  hat was left beh
4370: 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ind..*/.int sqli
4380: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4390: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
43a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
43b0: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
43c0: 74 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20  t pc;           
43d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
43e0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
43f0: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4410: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4420: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4430: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4440: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
4450: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
4460: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
4470: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
4480: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
4490: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
44a0: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
44b0: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
44c0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 2c   */.  Mem *pIn1,
44d0: 20 2a 70 49 6e 32 2c 20 2a 70 49 6e 33 3b 20 20   *pIn2, *pIn3;  
44e0: 20 2f 2a 20 49 6e 70 75 74 20 6f 70 65 72 61 6e   /* Input operan
44f0: 64 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  ds */.  Mem *pOu
4500: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
4510: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4520: 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50  rand */.  u8 opP
4530: 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69  roperty;.  int i
4540: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
4550: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
4560: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
4570: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
4580: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
4590: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
45a0: 50 65 72 6d 75 61 74 69 6f 6e 20 6f 66 20 63 6f  Permuation of co
45b0: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
45c0: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
45d0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
45e0: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
45f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4600: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4610: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4620: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4640: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
4650: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
4660: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  code */.#endif.#
4670: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4680: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4690: 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f 67  BACK.  int nProg
46a0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
46b0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
46c0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
46d0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
46e0: 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  /.#endif..  asse
46f0: 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44  rt( p->magic==VD
4700: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20  BE_MAGIC_RUN ); 
4710: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70   /* sqlite3_step
4720: 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73  () verifies this
4730: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
4740: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
4750: 4d 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20  MAGIC_BUSY );.  
4760: 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65  sqlite3BtreeMute
4770: 78 41 72 72 61 79 45 6e 74 65 72 28 26 70 2d 3e  xArrayEnter(&p->
4780: 61 4d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70  aMutex);.  if( p
4790: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
47a0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
47b0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
47c0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
47d0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
47e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
47f0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4800: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4810: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4820: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4830: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4840: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4850: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4860: 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  SY );.  p->rc = 
4870: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73  SQLITE_OK;.  ass
4880: 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d  ert( p->explain=
4890: 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75  =0 );.  p->pResu
48a0: 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d  ltSet = 0;.  db-
48b0: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
48c0: 73 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f  sy = 0;.  CHECK_
48d0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
48e0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
48f0: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65  aceSql(p);.#ifde
4900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4910: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
4920: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69  ignMalloc();.  i
4930: 66 28 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20  f( p->pc==0 .   
4940: 26 26 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67  && ((p->db->flag
4950: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4960: 69 73 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45  isting) || fileE
4970: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
4980: 65 78 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a  explain")).  ){.
4990: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
49a0: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
49b0: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
49c0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
49d0: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
49e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
49f0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4a00: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4a10: 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26  tOp(stdout, i, &
4a20: 70 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  p->aOp[i]);.    
4a30: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65  }.  }.  if( file
4a40: 45 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65  Exists(db, "vdbe
4a50: 5f 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20  _trace") ){.    
4a60: 70 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75  p->trace = stdou
4a70: 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
4a80: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4a90: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4aa0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4ab0: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4ac0: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4ad0: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4ae0: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4af0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4b00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4b10: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4b20: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4b30: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4b40: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4b50: 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d  if.    pOp = &p-
4b60: 3e 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f  >aOp[pc];..    /
4b70: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
4b80: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
4b90: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
4ba0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4bb0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
4bc0: 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a  if( p->trace ){.
4bd0: 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20        if( pc==0 
4be0: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
4bf0: 66 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f  f("VDBE Executio
4c00: 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  n Trace:\n");.  
4c10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4c20: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4c30: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
4c40: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70  te3VdbePrintOp(p
4c50: 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70  ->trace, pc, pOp
4c60: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4c70: 20 70 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20   p->trace==0 && 
4c80: 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  pc==0 ){.      s
4c90: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4ca0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20  nMalloc();.     
4cb0: 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28   if( fileExists(
4cc0: 64 62 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61  db, "vdbe_sqltra
4cd0: 63 65 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ce") ){.        
4ce0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4cf0: 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a  Sql(p);.      }.
4d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64        sqlite3End
4d10: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4d20: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
4d30: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
4d40: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
4d50: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
4d60: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
4d70: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
4d80: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
4d90: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
4da0: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
4db0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
4dc0: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
4dd0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
4de0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
4df0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4e00: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
4e10: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
4e20: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
4e30: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4e40: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
4e50: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
4e60: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
4e70: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4e80: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20  SS_CALLBACK.    
4e90: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
4ea0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
4eb0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
4ec0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
4ed0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a  ed number.    **
4ee0: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
4ef0: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
4f00: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
4f10: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
4f20: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
4f30: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
4f40: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
4f50: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
4f60: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
4f70: 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72      ** If the pr
4f80: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
4f90: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
4fa0: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
4fb0: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
4fc0: 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20      ** a return 
4fd0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
4fe0: 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  T..    */.    if
4ff0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20  ( db->xProgress 
5000: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
5010: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e  >nProgressOps==n
5020: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20  ProgressOps ){. 
5030: 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a         int prc;.
5040: 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
5050: 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
5060: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5070: 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
5080: 20 20 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50       prc =db->xP
5090: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
50a0: 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20  gressArg);.     
50b0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
50c0: 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
50d0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
50e0: 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69  isuse;.        i
50f0: 66 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20  f( prc!=0 ){.   
5100: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
5110: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
5120: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
5130: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
5140: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5150: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
5160: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5170: 6e 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a  nProgressOps++;.
5180: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5190: 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73    /* Do common s
51a0: 65 74 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20  etup processing 
51b0: 66 6f 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74  for any opcode t
51c0: 68 61 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20  hat is marked.  
51d0: 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f    ** with the "o
51e0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20  ut2-prerelease" 
51f0: 74 61 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64  tag.  Such opcod
5200: 65 73 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65  es have a single
5210: 0a 20 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77  .    ** output w
5220: 68 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65  hich is specifie
5230: 64 20 62 79 20 74 68 65 20 50 32 20 70 61 72 61  d by the P2 para
5240: 6d 65 74 65 72 2e 20 20 54 68 65 20 50 32 20 72  meter.  The P2 r
5250: 65 67 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69  egister.    ** i
5260: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
5270: 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a   a NULL..    */.
5280: 20 20 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d      opProperty =
5290: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
52a0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
52b0: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
52c0: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  y & OPFLG_OUT2_P
52d0: 52 45 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b  RERELEASE)!=0 ){
52e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
52f0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5300: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5310: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
5320: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
5330: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
5340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
5350: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
5360: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70  l(pOut);.      p
5370: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
5380: 5f 4e 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65  _Null;.    }else
5390: 0a 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d  . .    /* Do com
53a0: 6d 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70  mon setup for op
53b0: 63 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74  codes marked wit
53c0: 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  h one of the fol
53d0: 6c 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f  lowing.    ** co
53e0: 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72  mbinations of pr
53f0: 6f 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a  operties..    **
5400: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
5410: 20 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20    in1.    **    
5420: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20         in1 in2. 
5430: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
5440: 69 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20  in1 in2 out3.   
5450: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e   **           in
5460: 31 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20  1 in3.    **.   
5470: 20 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49   ** Variables pI
5480: 6e 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49  n1, pIn2, and pI
5490: 6e 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70  n3 are made to p
54a0: 6f 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69  oint to appropri
54b0: 61 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73  ate.    ** regis
54c0: 74 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e  ters for inputs.
54d0: 20 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20    Variable pOut 
54e0: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75  points to the ou
54f0: 74 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20  tput register.. 
5500: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f     */.    if( (o
5510: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5520: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5530: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5540: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p1>0 );.      as
5550: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
5560: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5570: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
5580: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20  pOp->p1];.      
5590: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
55a0: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
55b0: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
55c0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
55d0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
55e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
55f0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5600: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
5610: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
5620: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
5630: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5640: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5650: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29  E(pOp->p2, pIn2)
5660: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
5670: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5680: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
5690: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
56a0: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
56b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
56c0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
56d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75  );.          pOu
56e0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
56f0: 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
5700: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
5710: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5720: 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a  PFLG_IN3)!=0 ){.
5730: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5740: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5750: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5760: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
5770: 0a 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20  .        pIn3 = 
5780: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
5790: 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  ];.        REGIS
57a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
57b0: 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  3, pIn3);.      
57c0: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
57d0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
57e0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
57f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5800: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5810: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5820: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5830: 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
5840: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
5850: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5860: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5870: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5880: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5890: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
58a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
58b0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
58c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58d0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
58e0: 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn3 = &p->aMem
58f0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
5900: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5910: 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a  pOp->p3, pIn3);.
5920: 20 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63      }..    switc
5930: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5940: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
59a0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
59b0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
59c0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
59d0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
59e0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
59f0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5a00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5a10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5a20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5a30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5a40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5a50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5a60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5a70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5a80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5a90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5aa0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5ab0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5ac0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5ad0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5ae0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5af0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5b00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5b10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5b20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5b30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5b40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5b50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5b60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5b70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5b80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5b90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5ba0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5bb0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5bc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5bd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5be0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5bf0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5c00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5c10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5c20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5c30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5c40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5c50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5c60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5c70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5c80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5c90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ca0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5cb0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5cc0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5cd0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5ce0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5cf0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5d00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5d10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5d20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5d30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5d40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5d50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5d60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5d70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5d80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5d90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5da0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5db0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5dc0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5dd0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5de0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5df0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
5e00: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
5e10: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
5e20: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
5e30: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
5e40: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
5e50: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
5e60: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
5e70: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
5e80: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
5e90: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5ea0: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5eb0: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
5ec0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5ed0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
5ee0: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
5ef0: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
5f00: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5f10: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
5f20: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
5f30: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
5f40: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
5f50: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
5f60: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
5f70: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
5f80: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
5f90: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
5fa0: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
5fb0: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
5fc0: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
5fd0: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
5fe0: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
5ff0: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
6000: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
6010: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
6020: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
6030: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
6040: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
6050: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
6060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60a0: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
60b0: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
60c0: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
60d0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
60e0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
60f0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
6100: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
6110: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6120: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6130: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
6140: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
6150: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
6160: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6170: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6180: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
6190: 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  UPT;.  pc = pOp-
61a0: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
61b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
61c0: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
61d0: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
61e0: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
61f0: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6200: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6210: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6220: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6230: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6240: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6250: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6260: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
6270: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
6280: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e  );.  pIn1 = &p->
6290: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
62a0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
62b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
62c0: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
62d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
62e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
62f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6300: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6310: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6320: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6330: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6340: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6350: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6360: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6370: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6380: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6390: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
63a0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
63b0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
63c0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
63d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
63e0: 3b 0a 20 20 70 63 20 3d 20 70 49 6e 31 2d 3e 75  ;.  pc = pIn1->u
63f0: 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .i;.  break;.}..
6400: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
6410: 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
6420: 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67  ** Swap the prog
6430: 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68  ram counter with
6440: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6450: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
6460: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 0a 20  se OP_Yield: {. 
6470: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61   int pcDest;.  a
6480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
64a0: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
64b0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
64c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
64d0: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
64e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
64f0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6500: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6510: 20 70 63 44 65 73 74 20 3d 20 70 49 6e 31 2d 3e   pcDest = pIn1->
6520: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
6530: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
6540: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
6550: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
6560: 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a  cDest;.  break;.
6570: 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  }.../* Opcode:  
6580: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
6590: 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  *.**.** Exit imm
65a0: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
65b0: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 46 69 66  pen cursors, Fif
65c0: 6f 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  os, etc are clos
65d0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
65e0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
65f0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
6600: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
6610: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
6620: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
6630: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
6640: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6650: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6660: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6670: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6680: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6690: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
66a0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
66b0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
66c0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
66d0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
66e0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
66f0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
6700: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6710: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6720: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6730: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6740: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6750: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6760: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6770: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6780: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6790: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
67a0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
67b0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
67c0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
67d0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
67e0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
67f0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6800: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6810: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e  *.** There is an
6820: 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30   implied "Halt 0
6830: 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f   0 0" instructio
6840: 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  n inserted at th
6850: 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a  e very end of.**
6860: 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20   every program. 
6870: 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20   So a jump past 
6880: 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63  the last instruc
6890: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67  tion of the prog
68a0: 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61  ram.** is the sa
68b0: 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20  me as executing 
68c0: 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Halt..*/.case OP
68d0: 5f 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63  _Halt: {.  p->rc
68e0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
68f0: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65  >pc = pc;.  p->e
6900: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70  rrorAction = pOp
6910: 2d 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ->p2;.  if( pOp-
6920: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c  >p4.z ){.    sql
6930: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
6940: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
6950: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
6960: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6970: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
6980: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6990: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
69a0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
69b0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
69c0: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
69d0: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
69e0: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
69f0: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6a00: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6a10: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6a20: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6a30: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6a40: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6a50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6a60: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6a70: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6a80: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6a90: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
6aa0: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
6ab0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
6ac0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
6ad0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6ae0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6af0: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
6b00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6b10: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
6b20: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6b30: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6b40: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
6b50: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
6b60: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
6b70: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
6b80: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
6b90: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
6ba0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
6bb0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
6bc0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
6bd0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6be0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6bf0: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
6c00: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6c10: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
6c20: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
6c30: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
6c40: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
6c50: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
6c60: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
6c70: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
6c80: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6c90: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
6ca0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
6cb0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
6cc0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
6cd0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
6ce0: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
6cf0: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
6d00: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
6d10: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
6d20: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
6d30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6d40: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
6d50: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
6d60: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
6d70: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
6d80: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
6d90: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
6da0: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
6db0: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
6dc0: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
6dd0: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
6de0: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
6df0: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
6e00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
6e10: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
6e20: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
6e30: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
6e40: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
6e50: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
6e60: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74 72 6c    pOp->p1 = strl
6e70: 65 6e 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  en(pOp->p4.z);..
6e80: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6e90: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
6ea0: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
6eb0: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71 6c  _UTF8 ){.    sql
6ec0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
6ed0: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
6ee0: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
6ef0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
6f00: 43 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  C);.    if( SQLI
6f10: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
6f20: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
6f30: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
6f40: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
6f50: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
6f60: 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K!=sqlite3VdbeMe
6f70: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
6f80: 4f 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Out) ) goto no_m
6f90: 65 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d  em;.    pOut->zM
6fa0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
6fb0: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
6fc0: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f  M_Static;.    pO
6fd0: 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ut->flags &= ~ME
6fe0: 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70  M_Dyn;.    if( p
6ff0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
7000: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
7010: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
7020: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7030: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
7040: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
7050: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
7060: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
7070: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
7080: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7090: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
70a0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
70b0: 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
70c0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
70d0: 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c     UPDATE_MAX_BL
70e0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
70f0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
7100: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
7110: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
7120: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
7130: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
7140: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
7150: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
7160: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
7170: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
7180: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
7190: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
71a0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
71b0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
71c0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
71d0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
71e0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
71f0: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
7200: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7210: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7220: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7230: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
7240: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
7250: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
7260: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
7270: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
7280: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
7290: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
72a0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
72b0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
72c0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
72d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
72e0: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
72f0: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
7300: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7310: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
7320: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7330: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7340: 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   */.  break;.}..
7350: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7360: 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41  OMIT_BLOB_LITERA
7370: 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  L./* Opcode: Blo
7380: 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a  b P1 P2 * P4.**.
7390: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
73a0: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
73b0: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
73c0: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
73d0: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
73e0: 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
73f0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20  on is not coded 
7400: 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74  directly.** by t
7410: 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73  he compiler. Ins
7420: 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c  tead, the compil
7430: 65 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69  er layer specifi
7440: 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42  es.** an OP_HexB
7450: 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68  lob opcode, with
7460: 20 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20   the hex string 
7470: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
7480: 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73  f.** the blob as
7490: 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65   P4. This opcode
74a0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
74b0: 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a  to an OP_Blob.**
74c0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
74d0: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a  it is executed..
74e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
74f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
7500: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7510: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7520: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
7530: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
7540: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
7550: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7560: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
7570: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
7580: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
7590: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
75a0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
75b0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
75c0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
75d0: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 2a 2f 0a  BLOB_LITERAL */.
75e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
75f0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
7600: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
7610: 20 6f 66 20 76 61 72 69 61 62 6c 65 20 50 31 20   of variable P1 
7620: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
7630: 72 65 67 69 73 74 65 72 20 50 32 2e 20 41 20 76  register P2. A v
7640: 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 61 6e  ariable is.** an
7650: 20 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68 65 20   unknown in the 
7660: 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 73 74 72  original SQL str
7670: 69 6e 67 20 61 73 20 68 61 6e 64 65 64 20 74 6f  ing as handed to
7680: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
7690: 28 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63 75 72  ()..** Any occur
76a0: 72 65 6e 63 65 20 6f 66 20 74 68 65 20 27 3f 27  rence of the '?'
76b0: 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
76c0: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 69  e original SQL i
76d0: 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  s considered.** 
76e0: 61 20 76 61 72 69 61 62 6c 65 2e 20 20 56 61 72  a variable.  Var
76f0: 69 61 62 6c 65 73 20 69 6e 20 74 68 65 20 53 51  iables in the SQ
7700: 4c 20 73 74 72 69 6e 67 20 61 72 65 20 6e 75 6d  L string are num
7710: 62 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  ber from left to
7720: 0a 2a 2a 20 72 69 67 68 74 20 62 65 67 69 6e 6e  .** right beginn
7730: 69 6e 67 20 77 69 74 68 20 31 2e 20 20 54 68 65  ing with 1.  The
7740: 20 76 61 6c 75 65 73 20 6f 66 20 76 61 72 69 61   values of varia
7750: 62 6c 65 73 20 61 72 65 20 73 65 74 20 75 73 69  bles are set usi
7760: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
7770: 33 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a 2a 2f  3_bind() API..*/
7780: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
7790: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
77a0: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
77b0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6a 20 3d 20 70  e */.  int j = p
77c0: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 4d 65  Op->p1 - 1;.  Me
77d0: 6d 20 2a 70 56 61 72 3b 0a 20 20 61 73 73 65 72  m *pVar;.  asser
77e0: 74 28 20 6a 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e  t( j>=0 && j<p->
77f0: 6e 56 61 72 20 29 3b 0a 0a 20 20 70 56 61 72 20  nVar );..  pVar 
7800: 3d 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 3b 0a 20  = &p->aVar[j];. 
7810: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7820: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7830: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7840: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
7850: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7860: 43 6f 70 79 28 70 4f 75 74 2c 20 26 70 2d 3e 61  Copy(pOut, &p->a
7870: 56 61 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74  Var[j], MEM_Stat
7880: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
7890: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
78a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
78b0: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
78c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
78d0: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
78e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
78f0: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
7900: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
7910: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
7920: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
7930: 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  1-1 are.** left 
7940: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
7950: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
7960: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
7970: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
7980: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
7990: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a  -1 to overlap..*
79a0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
79b0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
79c0: 63 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70  c;.  int n = pOp
79d0: 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 70 31 20 3d  ->p3;.  int p1 =
79e0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20   pOp->p1;.  int 
79f0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
7a00: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
7a10: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 29 3b   assert( p1>0 );
7a20: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7a30: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e  p->nMem );.  pIn
7a40: 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d  1 = &p->aMem[p1]
7a50: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 30  ;.  assert( p2>0
7a60: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
7a70: 2b 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  +n<p->nMem );.  
7a80: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7a90: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
7aa0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
7ab0: 3d 70 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  =p1 );.  while( 
7ac0: 6e 2d 2d 20 29 7b 0a 20 20 20 20 7a 4d 61 6c 6c  n-- ){.    zMall
7ad0: 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  oc = pOut->zMall
7ae0: 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d  oc;.    pOut->zM
7af0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73  alloc = 0;.    s
7b00: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
7b10: 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20  e(pOut, pIn1);. 
7b20: 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63     pIn1->zMalloc
7b30: 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20   = zMalloc;.    
7b40: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7b50: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
7b60: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
7b70: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
7b80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
7b90: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
7ba0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
7bb0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
7bc0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7bd0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
7be0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
7bf0: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
7c00: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
7c10: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
7c20: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
7c30: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
7c40: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
7c50: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
7c60: 5f 43 6f 70 79 3a 20 7b 0a 20 20 61 73 73 65 72  _Copy: {.  asser
7c70: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
7c80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7c90: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
7ca0: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
7cb0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7cc0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
7cd0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7ce0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
7cf0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
7d00: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
7d10: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
7d20: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
7d30: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
7d40: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
7d50: 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d  phem);.  Deephem
7d60: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
7d70: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
7d80: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
7d90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7da0: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
7db0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
7dc0: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
7dd0: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
7de0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
7df0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
7e00: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
7e10: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
7e20: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
7e30: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
7e40: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
7e50: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
7e60: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
7e70: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
7e80: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
7e90: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
7ea0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
7eb0: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
7ec0: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
7ed0: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
7ee0: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
7ef0: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
7f00: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
7f10: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
7f20: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
7f30: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
7f40: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
7f50: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
7f60: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
7f70: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
7f80: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
7f90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
7fa0: 79 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  y: {.  assert( p
7fb0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
7fc0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
7fd0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
7fe0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
7ff0: 3e 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52  >p1];.  REGISTER
8000: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
8010: 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28  pIn1);.  assert(
8020: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
8030: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
8040: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
8050: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
8060: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8070: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8080: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8090: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
80a0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
80b0: 6d 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  m);.  REGISTER_T
80c0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
80d0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
80e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
80f0: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
8100: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  *.**.** The regi
8110: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
8120: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
8130: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
8140: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
8150: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
8160: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
8170: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
8180: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
8190: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
81a0: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
81b0: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
81c0: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
81d0: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
81e0: 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70  ccess to the top
81f0: 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68   P1 values as th
8200: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e  e result.** row.
8210: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
8220: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
8230: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
8240: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
8250: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
8260: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8270: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
8280: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
8290: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
82a0: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
82b0: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
82c0: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
82d0: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
82e0: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
82f0: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
8300: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
8310: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
8320: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
8330: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
8340: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
8350: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
8360: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
8370: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
8380: 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66  .  ** as side ef
8390: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
83a0: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
83b0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
83c0: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
83d0: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
83e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
83f0: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
8400: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
8410: 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26   storeTypeInfo(&
8420: 70 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e  pMem[i], encodin
8430: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
8440: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
8450: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
8460: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
8470: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
8480: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
8490: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
84a0: 20 2a 2f 0a 20 20 70 2d 3e 6e 43 61 6c 6c 62 61   */.  p->nCallba
84b0: 63 6b 2b 2b 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ck++;.  p->pc = 
84c0: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
84d0: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
84e0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
84f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
8500: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
8510: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
8520: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
8530: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
8540: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
8550: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
8560: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
8570: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
8580: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
8590: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
85a0: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
85b0: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
85c0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
85d0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
85e0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
85f0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
8600: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
8610: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
8620: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
8630: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
8640: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
8650: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
8660: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
8670: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
8680: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
8690: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
86a0: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
86b0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
86c0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73  64 nByte;..  ass
86d0: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
86e0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
86f0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
8700: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
8710: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
8720: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
8730: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
8740: 20 7d 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28   }.  ExpandBlob(
8750: 70 49 6e 31 29 3b 0a 20 20 53 74 72 69 6e 67 69  pIn1);.  Stringi
8760: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
8770: 67 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62  g);.  ExpandBlob
8780: 28 70 49 6e 32 29 3b 0a 20 20 53 74 72 69 6e 67  (pIn2);.  String
8790: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
87a0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
87b0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
87c0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
87d0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
87e0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
87f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8800: 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  g;.  }.  MemSetT
8810: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
8820: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71  M_Str);.  if( sq
8830: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
8840: 28 70 4f 75 74 2c 20 6e 42 79 74 65 2b 32 2c 20  (pOut, nByte+2, 
8850: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
8860: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
8870: 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d    }.  if( pOut!=
8880: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
8890: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
88a0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
88b0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
88c0: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
88d0: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
88e0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
88f0: 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  e] = 0;.  pOut->
8900: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
8910: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8920: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
8930: 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20  t->n = nByte;.  
8940: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
8950: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
8960: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8970: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8980: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
8990: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
89a0: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
89b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
89c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
89d0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
89e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
89f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8a00: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
8a10: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
8a20: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8a30: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
8a40: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
8a50: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  3 * *.**.**.** M
8a60: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
8a70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
8a80: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
8a90: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
8aa0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
8ab0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
8ac0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
8ad0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
8ae0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
8af0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
8b00: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
8b10: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
8b20: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
8b30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
8b40: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
8b50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8b60: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
8b70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
8b80: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
8b90: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
8ba0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
8bb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
8bc0: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
8bd0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
8be0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
8bf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
8c00: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
8c10: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
8c20: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
8c30: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
8c40: 33 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  3.  If the value
8c50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
8c60: 2a 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  ** is zero, then
8c70: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
8c80: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
8c90: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
8ca0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
8cb0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
8cc0: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
8cd0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8ce0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
8cf0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
8d00: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
8d10: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
8d20: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
8d30: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
8d40: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
8d50: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8d60: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
8d70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8d80: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
8d90: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
8da0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
8db0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
8dc0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8dd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
8de0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
8df0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8e00: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
8e10: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
8e20: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
8e30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8e40: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
8e50: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
8e60: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
8e70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
8e80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
8e90: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
8ea0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
8eb0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
8ec0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8ed0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
8ee0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
8ef0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
8f00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8f10: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
8f20: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
8f30: 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 61 70   int flags;.  ap
8f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
8f50: 74 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c  ty(pIn1);.  appl
8f60: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
8f70: 28 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20  (pIn2);.  flags 
8f80: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
8f90: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
8fa0: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
8fb0: 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20  Null)!=0 ) goto 
8fc0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
8fd0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28  t_is_null;.  if(
8fe0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
8ff0: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
9000: 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20  M_Int)==MEM_Int 
9010: 29 7b 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b  ){.    i64 a, b;
9020: 0a 20 20 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75  .    a = pIn1->u
9030: 2e 69 3b 0a 20 20 20 20 62 20 3d 20 70 49 6e 32  .i;.    b = pIn2
9040: 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63  ->u.i;.    switc
9050: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9060: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9070: 41 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b  Add:         b +
9080: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
9090: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
90a0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d  Subtract:    b -
90b0: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
90c0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
90d0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a  Multiply:    b *
90e0: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
90f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9100: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
9110: 20 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74    if( a==0 ) got
9120: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9130: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9140: 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67       /* Dividing
9150: 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73   the largest pos
9160: 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36  sible negative 6
9170: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31  4-bit integer (1
9180: 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20  <<63) by .      
9190: 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20    ** -1 returns 
91a0: 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c  an integer too l
91b0: 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e  arge to store in
91c0: 20 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74   a 64-bit data-t
91d0: 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20  ype. On.        
91e0: 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63  ** some architec
91f0: 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65  tures, the value
9200: 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31   overflows to (1
9210: 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73  <<63). On others
9220: 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53  ,.        ** a S
9230: 49 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e  IGFPE is issued.
9240: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
9250: 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69  tatement normali
9260: 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20  zes this.       
9270: 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20   ** behavior so 
9280: 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65  that all archite
9290: 63 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73  ctures behave as
92a0: 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20   if integer .   
92b0: 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77       ** overflow
92c0: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20   occurred..     
92d0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66     */.        if
92e0: 28 20 61 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d  ( a==-1 && b==SM
92f0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 61  ALLEST_INT64 ) a
9300: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20   = 1;.        b 
9310: 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72  /= a;.        br
9320: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9330: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
9340: 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29        if( a==0 )
9350: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9360: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9370: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d  .        if( a==
9380: 2d 31 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20  -1 ) a = 1;.    
9390: 20 20 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20      b %= a;.    
93a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
93b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
93c0: 74 2d 3e 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20  t->u.i = b;.    
93d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
93e0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
93f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62   }else{.    doub
9400: 6c 65 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d  le a, b;.    a =
9410: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
9420: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
9430: 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   b = sqlite3Vdbe
9440: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b  RealValue(pIn2);
9450: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
9460: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
9470: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
9480: 20 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20         b += a;  
9490: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
94a0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
94b0: 63 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20  ct:    b -= a;  
94c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
94d0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
94e0: 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20  ly:    b *= a;  
94f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9500: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9510: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9520: 61 3d 3d 30 2e 30 20 29 20 67 6f 74 6f 20 61 72  a==0.0 ) goto ar
9530: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9540: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9550: 20 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20   b /= a;.       
9560: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9570: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
9580: 0a 20 20 20 20 20 20 20 20 69 36 34 20 69 61 20  .        i64 ia 
9590: 3d 20 28 69 36 34 29 61 3b 0a 20 20 20 20 20 20  = (i64)a;.      
95a0: 20 20 69 36 34 20 69 62 20 3d 20 28 69 36 34 29    i64 ib = (i64)
95b0: 62 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  b;.        if( i
95c0: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  a==0 ) goto arit
95d0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
95e0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
95f0: 66 28 20 69 61 3d 3d 2d 31 20 29 20 69 61 20 3d  f( ia==-1 ) ia =
9600: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 3d 20   1;.        b = 
9610: 69 62 20 25 20 69 61 3b 0a 20 20 20 20 20 20 20  ib % ia;.       
9620: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9630: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
9640: 6c 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b  lite3IsNaN(b) ){
9650: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
9660: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9670: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
9680: 20 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20   pOut->r = b;.  
9690: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
96a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
96b0: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
96c0: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
96d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
96e0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
96f0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
9700: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
9710: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9720: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
9730: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9740: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
9750: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9760: 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a  CollSeq * * P4.*
9770: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
9780: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
9790: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
97a0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
97b0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
97c0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
97d0: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
97e0: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
97f0: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
9800: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
9810: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
9820: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
9830: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
9840: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
9850: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
9860: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
9870: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
9880: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
9890: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
98a0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
98b0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
98c0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
98d0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
98e0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
98f0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
9900: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
9910: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
9920: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
9930: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
9940: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
9950: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
9960: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61  OLLSEQ );.  brea
9970: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9980: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
9990: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
99a0: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
99b0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
99c0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
99d0: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
99e0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
99f0: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
9a00: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
9a10: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
9a20: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
9a30: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
9a40: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
9a50: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
9a60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9a70: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
9a80: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
9a90: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
9aa0: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
9ab0: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
9ac0: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
9ad0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
9ae0: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
9af0: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
9b00: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
9b10: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
9b20: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
9b30: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
9b40: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
9b50: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
9b60: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
9b70: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
9b80: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
9b90: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
9ba0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
9bb0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
9bc0: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
9bd0: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
9be0: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
9bf0: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
9c00: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
9c10: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
9c20: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
9c30: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
9c40: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
9c50: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
9c60: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
9c70: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
9c80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
9c90: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
9ca0: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
9cb0: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  ;.  int n = pOp-
9cc0: 3e 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20  >p5;..  apVal = 
9cd0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
9ce0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
9cf0: 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  0 );..  assert( 
9d00: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
9d10: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
9d20: 3d 70 2d 3e 6e 4d 65 6d 29 20 29 3b 0a 20 20 61  =p->nMem) );.  a
9d30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
9d40: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
9d50: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
9d60: 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65    pArg = &p->aMe
9d70: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
9d80: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
9d90: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70   pArg++){.    ap
9da0: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
9db0: 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
9dc0: 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29  (pArg, encoding)
9dd0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9de0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41  RACE(pOp->p2, pA
9df0: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
9e00: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
9e10: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
9e20: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
9e30: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
9e40: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
9e50: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
9e60: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
9e70: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
9e80: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
9e90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
9ea0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
9eb0: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
9ec0: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
9ed0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
9ee0: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
9ef0: 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  c;.  }..  assert
9f00: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
9f10: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
9f20: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
9f30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9f40: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
9f50: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
9f60: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
9f70: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
9f80: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
9f90: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
9fa0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
9fb0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
9fc0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
9fd0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
9fe0: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
9ff0: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
a000: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
a010: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
a020: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
a030: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
a040: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
a050: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
a060: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
a070: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
a080: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
a090: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
a0a0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
a0b0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
a0c0: 75 6e 63 2d 3e 6e 65 65 64 43 6f 6c 6c 53 65 71  unc->needCollSeq
a0d0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
a0e0: 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
a0f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
a100: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
a110: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
a120: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
a130: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
a140: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
a150: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
a160: 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ll;.  }.  if( sq
a170: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
a180: 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
a190: 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
a1a0: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
a1b0: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
a1c0: 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Val);.  if( sqli
a1d0: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
a1e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
a1f0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a200: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  x.s);.    goto a
a210: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
a220: 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  se;.  }.  if( db
a230: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
a240: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
a250: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
a260: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
a270: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
a280: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
a290: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
a2a0: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
a2b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
a2c0: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
a2d0: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
a2e0: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
a2f0: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
a300: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
a310: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
a320: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
a330: 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  lue..    **.    
a340: 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d  ** Note: Maybe M
a350: 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75  emRelease() shou
a360: 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20  ld be called if 
a370: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
a380: 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61  ).    ** fails a
a390: 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29  lso (the if(...)
a3a0: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
a3b0: 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65  ). But if people
a3c0: 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75   are.    ** misu
a3d0: 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65  sing sqlite, the
a3e0: 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70 72  y have bigger pr
a3f0: 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65  oblems than a le
a400: 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20  aked value..    
a410: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
a420: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a430: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  x.s);.    goto n
a440: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_mem;.  }..  /*
a450: 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72   If any auxiliar
a460: 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73  y data functions
a470: 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65   have been calle
a480: 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66  d by this user f
a490: 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d  unction,.  ** im
a4a0: 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74  mediately call t
a4b0: 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f  he destructor fo
a4c0: 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63  r any non-static
a4d0: 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20   values..  */.  
a4e0: 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e  if( ctx.pVdbeFun
a4f0: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
a500: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
a510: 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c  a(ctx.pVdbeFunc,
a520: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70   pOp->p1);.    p
a530: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
a540: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
a550: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  ;.    pOp->p4typ
a560: 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b  e = P4_VDBEFUNC;
a570: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
a580: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
a590: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
a5a0: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
a5b0: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
a5c0: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
a5d0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
a5e0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
a5f0: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
a600: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
a610: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
a620: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
a630: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
a640: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
a650: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
a660: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
a670: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
a680: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
a690: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
a6a0: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
a6b0: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
a6c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
a6d0: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
a6e0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a6f0: 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52   }.  REGISTER_TR
a700: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
a710: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
a720: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a730: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a740: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
a750: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
a760: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
a770: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
a780: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
a790: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
a7a0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
a7b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a7c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a7d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
a7e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a7f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a800: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
a810: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
a820: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
a830: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
a840: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
a850: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
a860: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a870: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a880: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a890: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a8a0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a8b0: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
a8c0: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
a8d0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
a8e0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
a8f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
a900: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
a910: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
a920: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
a930: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
a940: 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74  egiser P1..** St
a950: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a960: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a970: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
a980: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
a990: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a9a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
a9b0: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
a9c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
a9d0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a9e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a9f0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
aa00: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
aa10: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
aa20: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
aa30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
aa40: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
aa50: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
aa60: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
aa70: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
aa80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aa90: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
aaa0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
aab0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
aac0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
aad0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aae0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
ab10: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
ab20: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
ab30: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
ab40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ab50: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
ab60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ab70: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
ab80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
ab90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
aba0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
abb0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c 20  ut3 */.  i64 a, 
abc0: 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  b;..  if( (pIn1-
abd0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
abe0: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
abf0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ac00: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ac10: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
ac20: 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65    }.  a = sqlite
ac30: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
ac40: 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74  n2);.  b = sqlit
ac50: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ac60: 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20  In1);.  switch( 
ac70: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
ac80: 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e     case OP_BitAn
ac90: 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20  d:      a &= b; 
aca0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
acb0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
acc0: 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20      a |= b;     
acd0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
ace0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
acf0: 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61  a <<= b;    brea
ad00: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
ad10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
ad20: 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69  code==OP_ShiftRi
ad30: 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  ght );.         
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad50: 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61  a >>= b;    brea
ad60: 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  k;.  }.  pOut->u
ad70: 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74  .i = a;.  MemSet
ad80: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ad90: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
ada0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
adb0: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
adc0: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  * *.** .** Add t
add0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
ade0: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
adf0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
ae00: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
ae10: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
ae20: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
ae30: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
ae40: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
ae50: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
ae60: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
ae70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
ae80: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
ae90: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
aea0: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
aeb0: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
aec0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
aed0: 6f 64 65 3a 20 46 6f 72 63 65 49 6e 74 20 50 31  ode: ForceInt P1
aee0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
aef0: 20 43 6f 6e 76 65 72 74 20 76 61 6c 75 65 20 69   Convert value i
af00: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
af10: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  to an integer.  
af20: 49 66 20 74 68 65 20 76 61 6c 75 65 20 0a 2a 2a  If the value .**
af30: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 6e 75   in P1 is not nu
af40: 6d 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20 74  meric (meaning t
af50: 68 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c 4c  hat is is a NULL
af60: 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
af70: 74 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 6f  t.** does not lo
af80: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
af90: 65 72 20 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70  er or floating p
afa0: 6f 69 6e 74 20 6e 75 6d 62 65 72 29 20 74 68 65  oint number) the
afb0: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  n.** jump to P2.
afc0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
afd0: 6e 20 50 31 20 69 73 20 6e 75 6d 65 72 69 63 20  n P1 is numeric 
afe0: 74 68 65 6e 0a 2a 2a 20 63 6f 6e 76 65 72 74 20  then.** convert 
aff0: 69 74 20 69 6e 74 6f 20 74 68 65 20 6c 65 61 73  it into the leas
b000: 74 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  t integer that i
b010: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
b020: 72 20 65 71 75 61 6c 20 74 6f 20 69 74 73 0a 2a  r equal to its.*
b030: 2a 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  * current value 
b040: 69 66 20 50 33 3d 3d 30 2c 20 6f 72 20 74 6f 20  if P3==0, or to 
b050: 74 68 65 20 6c 65 61 73 74 20 69 6e 74 65 67 65  the least intege
b060: 72 20 74 68 61 74 20 69 73 20 73 74 72 69 63 74  r that is strict
b070: 6c 79 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  ly.** greater th
b080: 61 6e 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  an its current v
b090: 61 6c 75 65 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  alue if P3==1..*
b0a0: 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 72 63 65 49  /.case OP_ForceI
b0b0: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
b0c0: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
b0d0: 0a 20 20 69 36 34 20 76 3b 0a 20 20 61 70 70 6c  .  i64 v;.  appl
b0e0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
b0f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
b100: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
b110: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b120: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
b130: 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20  _Real))==0 ){.  
b140: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
b150: 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   1;.    break;. 
b160: 20 7d 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66   }.  if( pIn1->f
b170: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
b180: 7b 0a 20 20 20 20 76 20 3d 20 70 49 6e 31 2d 3e  {.    v = pIn1->
b190: 75 2e 69 20 2b 20 28 70 4f 70 2d 3e 70 33 21 3d  u.i + (pOp->p3!=
b1a0: 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  0);.  }else{.   
b1b0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
b1c0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
b1d0: 29 3b 0a 20 20 20 20 76 20 3d 20 28 73 71 6c 69  );.    v = (sqli
b1e0: 74 65 33 5f 69 6e 74 36 34 29 70 49 6e 31 2d 3e  te3_int64)pIn1->
b1f0: 72 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d  r;.    if( pIn1-
b200: 3e 72 3e 28 64 6f 75 62 6c 65 29 76 20 29 20 76  >r>(double)v ) v
b210: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ++;.    if( pOp-
b220: 3e 70 33 20 26 26 20 70 49 6e 31 2d 3e 72 3d 3d  >p3 && pIn1->r==
b230: 28 64 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b  (double)v ) v++;
b240: 0a 20 20 7d 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  .  }.  pIn1->u.i
b250: 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = v;.  MemSetTy
b260: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
b270: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
b280: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
b290: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
b2a0: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
b2b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b2c0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
b2d0: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
b2e0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
b2f0: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
b300: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
b310: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
b320: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
b330: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
b340: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
b350: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
b360: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
b370: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
b380: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
b390: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
b3a0: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
b3b0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
b3c0: 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66  n1 */.  applyAff
b3d0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b3e0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
b3f0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
b400: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
b410: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
b420: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
b430: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
b440: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
b450: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
b460: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
b470: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b480: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
b490: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
b4a0: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
b4b0: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
b4c0: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
b4d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b4e0: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
b4f0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
b500: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
b510: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
b520: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
b530: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
b540: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
b550: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
b560: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
b570: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
b580: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
b590: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
b5a0: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
b5b0: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
b5c0: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
b5d0: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
b5e0: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
b5f0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
b600: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
b610: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
b620: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
b630: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
b640: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
b650: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
b660: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
b670: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
b680: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
b690: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
b6a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
b6b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b6c0: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
b6d0: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
b6e0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
b6f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b700: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
b710: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
b720: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
b730: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
b740: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
b750: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
b760: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
b770: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
b780: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
b790: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
b7a0: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
b7b0: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
b7c0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
b7d0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
b7e0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
b7f0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
b800: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
b810: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
b820: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b830: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
b840: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
b850: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
b860: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
b870: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
b880: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
b890: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
b8a0: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
b8b0: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
b8c0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
b8d0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
b8e0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
b8f0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b900: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
b910: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
b920: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
b930: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
b940: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
b950: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
b960: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54  M_Blob);.  UPDAT
b970: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b980: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
b990: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
b9a0: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
b9b0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
b9c0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b9d0: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
b9e0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
b9f0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
ba00: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
ba10: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
ba20: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
ba30: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
ba40: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
ba50: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
ba60: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
ba70: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
ba80: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
ba90: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
baa0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
bab0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
bac0: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bae0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
baf0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  LOB, in1 */.  if
bb00: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
bb10: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
bb20: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bb30: 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
bb40: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
bb50: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bb60: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
bb70: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61  encoding);.    a
bb80: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
bb90: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
bba0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
bbb0: 20 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74   );.  }.  MemSet
bbc0: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
bbd0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41  EM_Blob);.  UPDA
bbe0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bbf0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
bc00: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
bc10: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
bc20: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bc30: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bc40: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
bc50: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
bc60: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
bc70: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
bc80: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
bc90: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
bca0: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
bcb0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bcc0: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
bcd0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
bce0: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
bcf0: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
bd00: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
bd10: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
bd20: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bd30: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bd40: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bd50: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bd60: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bd70: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
bda0: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
bdb0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bdc0: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
bdd0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
bde0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
bdf0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
be00: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
be10: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
be20: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
be30: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
be40: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
be50: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
be60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
be70: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
be80: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
be90: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
bea0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
beb0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
bec0: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
bed0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
bee0: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
bef0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
bf00: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
bf10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
bf20: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
bf30: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
bf40: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
bf50: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
bf60: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bf70: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bf80: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bf90: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bfa0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bfb0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
bfc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bfd0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
bfe0: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bff0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c000: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
c010: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
c020: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
c030: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c040: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c050: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c060: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c070: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c080: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c090: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c0a0: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c0b0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c0c0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c0d0: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c0e0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c0f0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c100: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c110: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c120: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c130: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c140: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c150: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c160: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c170: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c180: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c190: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c1a0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c1b0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c1c0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c1d0: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c200: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c210: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c220: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c230: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c240: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c250: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c260: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c270: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c280: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c290: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c2a0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c2b0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c2c0: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c2d0: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c2e0: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c2f0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c300: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c310: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c320: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c330: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c340: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c350: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c360: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c370: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c380: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c390: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c3a0: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c3b0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c3c0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c3d0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
c3e0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
c3f0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
c400: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
c410: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
c420: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
c430: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
c440: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
c450: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
c460: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
c470: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
c480: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
c490: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
c4a0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
c4b0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
c4c0: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
c4d0: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
c4e0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
c4f0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
c500: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
c510: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
c520: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
c530: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c540: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
c550: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
c560: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
c570: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
c580: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
c590: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
c5a0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
c5b0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
c5c0: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
c5d0: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
c5e0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
c5f0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
c600: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
c610: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
c620: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c630: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
c640: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
c650: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c660: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
c670: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
c680: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
c690: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
c6a0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
c6b0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
c6c0: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
c6d0: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
c6e0: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
c6f0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
c700: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
c710: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c720: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
c730: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
c740: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
c750: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
c760: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
c770: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
c780: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
c790: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c7a0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
c7b0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
c7c0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c7d0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
c7e0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
c7f0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
c800: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
c810: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
c820: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
c830: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
c840: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
c850: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
c860: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
c870: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
c880: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
c890: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
c8a0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
c8b0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
c8c0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
c8d0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
c8e0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
c8f0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
c900: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
c910: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c920: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
c930: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
c940: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
c950: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c960: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
c970: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
c980: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
c990: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
c9a0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
c9b0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
c9c0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
c9d0: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
c9e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c9f0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
ca00: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
ca10: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
ca20: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
ca30: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
ca40: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
ca50: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
ca60: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
ca70: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
ca80: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
ca90: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
caa0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
cab0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
cac0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
cad0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
cae0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
caf0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
cb00: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
cb10: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
cb20: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
cb30: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
cb40: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
cb50: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cb60: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
cb70: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
cb80: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
cb90: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
cba0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
cbb0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
cbc0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
cbd0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
cbe0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
cbf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cc00: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cc10: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
cc20: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cc30: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cc40: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cc50: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
cc60: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
cc70: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
cc80: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
cc90: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
cca0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
ccb0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ccc0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ccd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ccf0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
cd00: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
cd10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cd30: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
cd40: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
cd50: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
cd60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd70: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
cd80: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
cd90: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
cda0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cdb0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
cdc0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
cdd0: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
cde0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cdf0: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ce00: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ce10: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ce20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ce30: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ce40: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
ce50: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
ce60: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
ce70: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
ce80: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
ce90: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
cea0: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
ceb0: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
cec0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
ced0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
cee0: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
cef0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
cf00: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
cf10: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
cf20: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
cf30: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
cf40: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
cf50: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
cf60: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
cf70: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
cf80: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
cf90: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
cfa0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
cfb0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
cfc0: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
cfd0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
cfe0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
cff0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
d000: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
d010: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
d020: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
d030: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
d040: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
d050: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
d060: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
d070: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d080: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
d090: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
d0a0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
d0b0: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
d0c0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d0d0: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
d0e0: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
d0f0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
d100: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
d110: 70 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d 20 73  pIn3);.  res = s
d120: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
d130: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
d140: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73  ->p4.pColl);.  s
d150: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
d160: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
d170: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
d180: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
d190: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
d1a0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
d1b0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d1c0: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
d1d0: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
d1e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d1f0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
d200: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
d210: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d220: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
d230: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
d240: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
d250: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
d260: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d270: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
d280: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
d290: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
d2a0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
d2b0: 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ];.    MemSetTyp
d2c0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d2d0: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
d2e0: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
d2f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d300: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
d310: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
d320: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
d330: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
d340: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d350: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
d360: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
d370: 20 74 68 65 20 70 65 72 6d 75 61 74 69 6f 6e 20   the permuation 
d380: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
d390: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
d3a0: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
d3b0: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
d3c0: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
d3d0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
d3e0: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
d3f0: 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d  the next OP_Perm
d400: 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70  utation, OP_Comp
d410: 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c  are,.** OP_Halt,
d420: 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77   or OP_ResultRow
d430: 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  .  Typically the
d440: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
d450: 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20  should occur.** 
d460: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
d470: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
d480: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
d490: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
d4a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
d4b0: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
d4c0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
d4d0: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
d4e0: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
d4f0: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
d500: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
d510: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
d520: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65   *.**.** Compare
d530: 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72   to vectors of r
d540: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
d550: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
d560: 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f  ) (all this.** o
d570: 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  ne "A") and in r
d580: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
d590: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
d5a0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
d5b0: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
d5c0: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
d5d0: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
d5e0: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  struct..**.** P4
d5f0: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
d600: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
d610: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
d620: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
d630: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
d640: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
d650: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
d660: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
d670: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
d680: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
d690: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
d6a0: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
d6b0: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
d6c0: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
d6d0: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
d6e0: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
d6f0: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
d700: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
d710: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
d720: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
d730: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d740: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d750: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
d760: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 20  pare: {.  int n 
d770: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
d780: 20 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20 63 6f   i, p1, p2;.  co
d790: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
d7a0: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
d7b0: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
d7c0: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
d7d0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
d7e0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
d7f0: 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p1;.  assert( p1
d800: 3e 30 20 26 26 20 70 31 2b 6e 2d 31 3c 70 2d 3e  >0 && p1+n-1<p->
d810: 6e 4d 65 6d 20 29 3b 0a 20 20 70 32 20 3d 20 70  nMem );.  p2 = p
d820: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
d830: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 2d 31  ( p2>0 && p2+n-1
d840: 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 66 6f  <p->nMem );.  fo
d850: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
d860: 7b 0a 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20  {.    int idx = 
d870: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
d880: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
d890: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
d8a0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
d8b0: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
d8c0: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
d8d0: 20 20 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20      int bRev;   
d8e0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
d8f0: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
d900: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20  rt order */.    
d910: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d920: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
d930: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
d940: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
d950: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
d960: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
d970: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
d980: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
d990: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
d9a0: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
d9b0: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
d9c0: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
d9d0: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
d9e0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
d9f0: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
da00: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
da10: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
da20: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
da30: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
da40: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
da50: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
da60: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
da70: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
da80: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
da90: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
daa0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
dab0: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
dac0: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
dad0: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
dae0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
daf0: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
db00: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
db10: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
db20: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
db30: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
db40: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
db50: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
db60: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
db70: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
db80: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
db90: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
dba0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
dbb0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
dbc0: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
dbd0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
dbe0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
dbf0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
dc00: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
dc10: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
dc20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
dc30: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
dc40: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
dc50: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
dc60: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
dc70: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dc80: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
dc90: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
dca0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
dcb0: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
dcc0: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
dcd0: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
dce0: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
dcf0: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
dd00: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
dd10: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
dd20: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
dd30: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
dd40: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
dd50: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
dd60: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
dd70: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
dd80: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dd90: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
dda0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
ddb0: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
ddc0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
ddd0: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
dde0: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
ddf0: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
de00: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
de10: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
de20: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
de30: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
de40: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
de50: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
de60: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
de70: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
de80: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
de90: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
dea0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
deb0: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
dec0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ded0: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
dee0: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
def0: 2c 20 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46  , v2;    /* 0==F
df00: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
df10: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
df20: 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31  L */..  if( pIn1
df30: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
df40: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
df50: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
df60: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
df70: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
df80: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32  ;.  }.  if( pIn2
df90: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dfa0: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
dfb0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
dfc0: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
dfd0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
dfe0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
dff0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
e000: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
e010: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
e020: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
e030: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
e040: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
e050: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
e060: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
e070: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
e080: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
e090: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
e0a0: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
e0b0: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
e0c0: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
e0d0: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
e0e0: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
e0f0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e100: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
e110: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e120: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
e130: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
e140: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
e150: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e160: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
e170: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
e180: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e190: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e1a0: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
e1b0: 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61  an value.  Repla
e1c0: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e1d0: 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s complement.  I
e1e0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
e1f0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
e200: 4c 4c 20 69 74 73 20 76 61 6c 75 65 0a 2a 2a 20  LL its value.** 
e210: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
e220: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e240: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
e250: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  , in1 */.  if( p
e260: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e270: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
e280: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
e290: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
e2a0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e2b0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e2c0: 6e 31 2d 3e 75 2e 69 20 3d 20 21 70 49 6e 31 2d  n1->u.i = !pIn1-
e2d0: 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
e2e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e2f0: 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Int );.  break;.
e300: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
e310: 74 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tNot P1 * * * *.
e320: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
e330: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e340: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
e350: 20 69 6e 74 65 67 65 72 2e 20 20 52 65 70 6c 61   integer.  Repla
e360: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e370: 73 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  s ones-complemen
e380: 74 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  t.  If the value
e390: 20 69 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 4e   is originally N
e3a0: 55 4c 4c 2c 20 6c 65 61 76 65 0a 2a 2a 20 69 74  ULL, leave.** it
e3b0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63   unchanged..*/.c
e3c0: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e3e0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
e3f0: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
e400: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e410: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20  M_Null ) break; 
e420: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74   /* Do nothing t
e430: 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c  o NULLs */.  sql
e440: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e450: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e460: 49 6e 31 2d 3e 75 2e 69 20 3d 20 7e 70 49 6e 31  In1->u.i = ~pIn1
e470: 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  ->u.i;.  assert(
e480: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
e490: 5f 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b  _Int );.  break;
e4a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
e4b0: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
e4c0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e4d0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e4e0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
e4f0: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
e500: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e510: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
e520: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
e530: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
e540: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e550: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e560: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e570: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
e580: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
e590: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e5a0: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e5b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e5c0: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
e5d0: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e5e0: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e5f0: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
e600: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
e610: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
e620: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e630: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e640: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e650: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
e660: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
e670: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e680: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
e690: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
e6a0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e6b0: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69   */.  int c;.  i
e6c0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e6d0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e6e0: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
e6f0: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
e700: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e710: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
e720: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e730: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 23 65 6c 73  alue(pIn1);.#els
e740: 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
e750: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
e760: 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
e770: 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
e780: 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
e790: 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
e7a0: 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
e7b0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
e7c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e7d0: 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
e7e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e7f0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e800: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e810: 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
e820: 2e 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61  .  If P3 is grea
e830: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f  ter.** than zero
e840: 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c  , then check all
e850: 20 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c   values reg(P1),
e860: 20 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20   reg(P1+1), .** 
e870: 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20  reg(P1+2), ..., 
e880: 72 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f  reg(P1+P3-1)..*/
e890: 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
e8a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e8b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
e8c0: 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
e8d0: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
e8e0: 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
e8f0: 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p3==0 || pOp-
e900: 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20  >p1>0 );.  do{. 
e910: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e920: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
e930: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
e940: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
e950: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e960: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
e970: 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29  while( --n > 0 )
e980: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e990: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
e9a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e9b0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
e9c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e9d0: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
e9e0: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
e9f0: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
ea00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ea10: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
ea20: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
ea30: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ea40: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
ea50: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ea60: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
ea70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ea80: 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  de: SetNumColumn
ea90: 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  s * P2 * * *.**.
eaa0: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73  ** This opcode s
eab0: 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ets the number o
eac0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
ead0: 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  e cursor opened 
eae0: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
eaf0: 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ing instruction 
eb00: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  to P2..**.** An 
eb10: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
eb20: 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20   is only useful 
eb30: 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d  if it occurs imm
eb40: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
eb50: 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  .** one of the f
eb60: 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
eb70: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  :.**.**     Open
eb80: 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  Read.**     Open
eb90: 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65  Write.**     Ope
eba0: 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66  nPseudo.**.** If
ebb0: 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
ebc0: 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65  pcode is to be e
ebd0: 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72  xecuted on a cur
ebe0: 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  sor, then.** thi
ebf0: 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  s opcode must be
ec00: 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61   present immedia
ec10: 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20  tely before the 
ec20: 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f  opcode that.** o
ec30: 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e  pens the cursor.
ec40: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e  .*/.case OP_SetN
ec50: 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62  umColumns: {.  b
ec60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ec70: 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
ec80: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
ec90: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
eca0: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
ecb0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
ecc0: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
ecd0: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
ece0: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
ecf0: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
ed00: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ed10: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
ed20: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
ed30: 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
ed40: 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
ed50: 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
ed60: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
ed70: 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
ed80: 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
ed90: 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
eda0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
edb0: 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
edc0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
edd0: 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
ede0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
edf0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
ee00: 49 66 20 74 68 65 20 4b 65 79 41 73 44 61 74 61  If the KeyAsData
ee10: 20 6f 70 63 6f 64 65 20 68 61 73 20 70 72 65 76   opcode has prev
ee20: 69 6f 75 73 6c 79 20 65 78 65 63 75 74 65 64 20  iously executed 
ee30: 6f 6e 20 74 68 69 73 20 63 75 72 73 6f 72 2c 20  on this cursor, 
ee40: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 66 69 65 6c  then the.** fiel
ee50: 64 20 6d 69 67 68 74 20 62 65 20 65 78 74 72 61  d might be extra
ee60: 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65  cted from the ke
ee70: 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  y rather than th
ee80: 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
ee90: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
eea0: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
eeb0: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
eec0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
eed0: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
eee0: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
eef0: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
ef00: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
ef10: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
ef20: 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73  e result..*/.cas
ef30: 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
ef40: 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65   u32 payloadSize
ef50: 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
ef60: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
ef70: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
ef80: 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20   = pOp->p1;  /* 
ef90: 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
efa0: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
efb0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f  p2 = pOp->p2;  /
efc0: 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
efd0: 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
efe0: 20 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30 3b   Cursor *pC = 0;
eff0: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
f000: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
f010: 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
f020: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
f030: 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
f040: 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
f050: 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
f060: 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
f070: 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
f080: 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
f090: 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
f0a0: 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
f0b0: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f0c0: 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
f0d0: 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
f0e0: 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
f0f0: 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
f100: 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
f110: 20 20 75 33 32 20 6e 46 69 65 6c 64 3b 20 20 20    u32 nField;   
f120: 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
f130: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
f140: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
f150: 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
f160: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
f170: 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
f180: 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
f190: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
f1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
f1b0: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
f1c0: 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
f1d0: 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
f1e0: 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
f1f0: 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
f200: 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
f210: 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
f220: 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
f230: 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
f240: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
f250: 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
f260: 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
f270: 6f 64 65 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e  oded */..  sMem.
f280: 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 73 4d 65  flags = 0;.  sMe
f290: 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 73 4d 65 6d  m.db = 0;.  sMem
f2a0: 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
f2b0: 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
f2c0: 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
f2d0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
f2e0: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
f2f0: 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
f300: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
f310: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
f320: 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
f330: 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62  l);..  /* This b
f340: 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61  lock sets the va
f350: 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69  riable payloadSi
f360: 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74  ze to be the tot
f370: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  al number of.  *
f380: 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  * bytes in the r
f390: 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ecord..  **.  **
f3a0: 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20   zRec is set to 
f3b0: 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  be the complete 
f3c0: 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f  text of the reco
f3d0: 72 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69  rd if it is avai
f3e0: 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lable..  ** The 
f3f0: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20  complete record 
f400: 74 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61  text is always a
f410: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65  vailable for pse
f420: 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20  udo-tables.  ** 
f430: 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  If the record is
f440: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72   stored in a cur
f450: 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74  sor, the complet
f460: 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20  e record text.  
f470: 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69  ** might be avai
f480: 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43  lable in the  pC
f490: 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f  ->aRow cache.  O
f4a0: 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62  r it might not b
f4b0: 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64  e..  ** If the d
f4c0: 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ata is unavailab
f4d0: 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74  le,  zRec is set
f4e0: 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20   to NULL..  **. 
f4f0: 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70   ** We also comp
f500: 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
f510: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
f520: 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75   record.  For cu
f530: 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20  rsors,.  ** the 
f540: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
f550: 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  s is stored in t
f560: 68 65 20 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64  he Cursor.nField
f570: 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
f580: 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
f590: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
f5a0: 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  !=0 );.#ifndef S
f5b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
f5c0: 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
f5d0: 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
f5e0: 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20  r==0 );.#endif. 
f5f0: 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
f600: 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
f610: 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
f620: 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
f630: 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
f640: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
f650: 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
f660: 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
f670: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
f680: 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20    zRec = 0;.    
f690: 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
f6a0: 73 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  sor;.    if( pC-
f6b0: 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
f6c0: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f6d0: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
f6e0: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
f6f0: 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
f700: 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
f710: 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ze = pC->payload
f720: 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63  Size;.      zRec
f730: 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52   = (char*)pC->aR
f740: 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ow;.    }else if
f750: 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
f760: 0a 20 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f  .      i64 paylo
f770: 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20  adSize64;.      
f780: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
f790: 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
f7a0: 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
f7b0: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f7c0: 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
f7d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f7e0: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
f7f0: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
f800: 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d  loadSize);.    }
f810: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43  .    nField = pC
f820: 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  ->nField;.  }els
f830: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
f840: 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
f850: 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  ;.    /* The rec
f860: 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20  ord is the sole 
f870: 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64  entry of a pseud
f880: 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70  o-table */.    p
f890: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
f8a0: 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63  >nData;.    zRec
f8b0: 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20   = pC->pData;.  
f8c0: 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
f8d0: 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
f8e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
f8f0: 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
f900: 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46  Rec!=0 );.    nF
f910: 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
f920: 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30  d;.    pCrsr = 0
f930: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
f940: 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
f950: 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
f960: 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
f970: 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
f980: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
f990: 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
f9a0: 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
f9b0: 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
f9c0: 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f 61    }.  if( payloa
f9d0: 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  dSize>db->aLimit
f9e0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
f9f0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
fa00: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
fa10: 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69    assert( p2<nFi
fa20: 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  eld );..  /* Rea
fa30: 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20  d and parse the 
fa40: 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53  table header.  S
fa50: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
fa60: 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20   of the parse.  
fa70: 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ** into the reco
fa80: 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20  rd header cache 
fa90: 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75  fields of the cu
faa0: 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79  rsor..  */.  aTy
fab0: 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a  pe = pC->aType;.
fac0: 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
fad0: 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
fae0: 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65  tr ){.    aOffse
faf0: 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
fb00: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38  .  }else{.    u8
fb10: 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 2f   *zIdx;        /
fb20: 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
fb30: 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a  der */.    u8 *z
fb40: 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20 50  EndHdr;     /* P
fb50: 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
fb60: 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
fb70: 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 33 32  eader */.    u32
fb80: 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a   offset;      /*
fb90: 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
fba0: 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74   data */.    int
fbb0: 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a   szHdrSz;     /*
fbc0: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
fbd0: 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
fbe0: 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
fbf0: 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76 61  d */.    int ava
fc00: 69 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  il;       /* Num
fc10: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
fc20: 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
fc30: 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61 54  /..    assert(aT
fc40: 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f  ype);.    pC->aO
fc50: 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
fc60: 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
fc70: 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
fc80: 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
fc90: 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
fca0: 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
fcb0: 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
fcc0: 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
fcd0: 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
fce0: 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
fcf0: 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
fd00: 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
fd10: 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
fd20: 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
fd30: 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
fd40: 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
fd50: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
fd60: 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
fd70: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
fd80: 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
fd90: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
fda0: 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
fdb0: 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
fdc0: 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
fdd0: 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
fde0: 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
fdf0: 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
fe00: 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
fe10: 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
fe20: 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
fe30: 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
fe40: 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
fe50: 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
fe60: 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
fe70: 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
fe80: 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
fe90: 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
fea0: 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
feb0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fec0: 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c   if( avail>=payl
fed0: 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
fee0: 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b     zRec = zData;
fef0: 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
ff00: 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a  w = (u8*)zData;.
ff10: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
ff20: 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
ff30: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
ff40: 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
ff50: 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20  owing assert is 
ff60: 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65  true in all case
ff70: 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20  s accept when.  
ff80: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
ff90: 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20  e file has been 
ffa0: 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e  corrupted extern
ffb0: 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20  ally..    **    
ffc0: 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20  assert( zRec!=0 
ffd0: 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61  || avail>=payloa
ffe0: 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d  dSize || avail>=
fff0: 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64  9 ); */.    szHd
10000 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74 33  rSz = getVarint3
10010 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66  2((u8*)zData, of
10020 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  fset);..    /* T
10030 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72  he KeyFetch() or
10040 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f   DataFetch() abo
10050 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20  ve are fast and 
10060 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74  will get the ent
10070 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ire.    ** recor
10080 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74  d header in most
10090 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65   cases.  But the
100a0 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67  y will fail to g
100b0 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  et the complete.
100c0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65      ** record he
100d0 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f  ader if the reco
100e0 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e  rd header does n
100f0 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  ot fit on a sing
10100 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69  le page.    ** i
10110 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57  n the B-Tree.  W
10120 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73  hen that happens
10130 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62  , use sqlite3Vdb
10140 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
10150 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72  to.    ** acquir
10160 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  e the complete h
10170 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20  eader text..    
10180 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63  */.    if( !zRec
10190 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65 74   && avail<offset
101a0 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
101b0 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
101c0 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
101d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
101e0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
101f0 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74  pCrsr, 0, offset
10200 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
10210 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
10220 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
10230 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
10240 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10250 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
10260 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
10270 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
10280 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66  (u8 *)&zData[off
10290 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d  set];.    zIdx =
102a0 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a   (u8 *)&zData[sz
102b0 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20  HdrSz];..    /* 
102c0 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
102d0 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
102e0 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
102f0 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
10300 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
10310 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
10320 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
10330 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
10340 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
10350 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
10360 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
10370 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
10380 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
10390 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
103a0 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
103b0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
103c0 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
103d0 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30    */.    for(i=0
103e0 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  ; i<nField; i++)
103f0 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
10400 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20  <zEndHdr ){.    
10410 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
10420 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20   offset;.       
10430 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69   zIdx += getVari
10440 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65  nt32(zIdx, aType
10450 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  [i]);.        of
10460 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33 56  fset += sqlite3V
10470 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
10480 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20  (aType[i]);.    
10490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
104a0 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
104b0 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
104c0 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
104d0 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
104e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
104f0 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
10500 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
10510 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
10520 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
10530 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
10540 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
10550 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
10560 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
10570 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
10580 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
10590 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
105a0 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
105b0 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
105c0 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
105d0 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
105e0 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
105f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
10600 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
10610 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
10620 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10630 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
10640 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
10650 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
10660 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
10670 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
10680 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
10690 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
106a0 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
106b0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
106c0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
106d0 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
106e0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
106f0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
10700 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
10710 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
10720 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
10730 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
10740 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
10750 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
10760 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
10770 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
10780 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
10790 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
107a0 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
107b0 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72  if( zIdx>zEndHdr
107c0 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f   || offset>paylo
107d0 61 64 53 69 7a 65 20 7c 7c 20 28 7a 49 64 78 3d  adSize || (zIdx=
107e0 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73  =zEndHdr && offs
107f0 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29  et!=payloadSize)
10800 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
10810 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
10820 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
10830 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10840 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65    }.  }..  /* Ge
10850 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66  t the column inf
10860 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66  ormation. If aOf
10870 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d  fset[p2] is non-
10880 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  zero, then .  **
10890 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65   deserialize the
108a0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
108b0 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73  record. If aOffs
108c0 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a  et[p2] is zero,.
108d0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20    ** then there 
108e0 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66  are not enough f
108f0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
10900 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74  ord to satisfy t
10910 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e  he.  ** request.
10920 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
10930 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55  set the value NU
10940 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50  LL or to P4 if P
10950 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e  4 is.  ** a poin
10960 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a  ter to a Mem obj
10970 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ect..  */.  if( 
10980 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20  aOffset[p2] ){. 
10990 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
109a0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
109b0 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
109c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
109d0 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
109e0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
109f0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
10a00 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
10a10 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
10a20 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
10a30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10a40 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
10a50 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
10a60 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20  aType[p2]);.    
10a70 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10a80 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
10a90 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  t);.      rc = s
10aa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
10ab0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
10ac0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
10ad0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
10ae0 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
10af0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
10b00 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
10b10 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
10b20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
10b30 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
10b40 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
10b50 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c  lGet((u8*)zData,
10b60 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73   aType[p2], pDes
10b70 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
10b80 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
10b90 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
10ba0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
10bb0 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
10bc0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10bd0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
10be0 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
10bf0 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
10c00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10c10 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66  assert( pDest->f
10c20 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  lags&MEM_Null );
10c30 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
10c40 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
10c50 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
10c60 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
10c70 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
10c80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
10c90 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
10ca0 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
10cb0 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
10cc0 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
10cd0 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
10ce0 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
10cf0 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
10d00 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
10d10 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
10d20 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
10d30 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
10d40 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
10d50 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
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 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
10d90 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
10da0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
10db0 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
10dc0 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
10dd0 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
10de0 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
10df0 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
10e00 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
10e10 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
10e20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
10e30 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
10e40 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
10e50 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
10e60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
10e70 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
10e80 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
10e90 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
10ea0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
10eb0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
10ec0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
10ed0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
10ee0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10ef0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
10f00 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
10f10 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
10f20 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
10f30 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
10f40 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
10f50 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
10f60 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
10f70 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
10f80 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
10f90 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
10fa0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
10fb0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
10fc0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
10fd0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
10fe0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
10ff0 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
11000 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
11010 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
11020 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
11030 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 20 3d 20    Mem *pData0 = 
11040 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
11050 5d 3b 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 20  ];.  Mem *pLast 
11060 3d 20 26 70 44 61 74 61 30 5b 70 4f 70 2d 3e 70  = &pData0[pOp->p
11070 32 2d 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65  2-1];.  Mem *pRe
11080 63 3b 0a 0a 20 20 66 6f 72 28 70 52 65 63 3d 70  c;..  for(pRec=p
11090 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
110a0 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
110b0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63   ExpandBlob(pRec
110c0 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
110d0 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
110e0 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
110f0 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
11100 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11110 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
11120 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
11130 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  *.**.** Convert 
11140 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
11150 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
11160 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74  nto a single ent
11170 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66  ry.** suitable f
11180 6f 72 20 75 73 65 20 61 73 20 61 20 64 61 74 61  or use as a data
11190 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
111a0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
111b0 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
111c0 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74   index.  The det
111d0 61 69 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ails of the form
111e0 61 74 20 61 72 65 20 69 72 72 65 6c 65 76 61 6e  at are irrelevan
111f0 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20  t as long as.** 
11200 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
11210 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
11220 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
11230 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 73 6f  ..** Refer to so
11240 75 72 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e  urce code commen
11250 74 73 20 66 6f 72 20 74 68 65 20 64 65 74 61 69  ts for the detai
11260 6c 73 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ls of the record
11270 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a  .** format..**.*
11280 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
11290 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
112a0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
112b0 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
112c0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
112d0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
112e0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
112f0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
11300 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
11310 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
11320 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
11330 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
11340 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
11350 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
11360 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
11370 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
11380 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
11390 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
113a0 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
113b0 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
113c0 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
113d0 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61  nity NONE..*/.ca
113e0 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
113f0 3a 20 7b 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  : {.  /* Assumin
11400 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
11410 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
11420 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
11430 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
11440 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
11450 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
114a0 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
114b0 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
114c0 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
114d0 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
114e0 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
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 2d 2d  ----------------
11510 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11530 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
11540 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
11550 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
11560 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
11570 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
11580 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
11590 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20  so froth..  **. 
115a0 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
115b0 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
115c0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
115d0 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
115e0 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
115f0 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
11600 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
11610 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
11620 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
11630 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
11640 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
11650 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
11660 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
11670 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
11680 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
11690 0a 20 20 2a 2f 0a 20 20 75 38 20 2a 7a 4e 65 77  .  */.  u8 *zNew
116a0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
116b0 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
116c0 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
116d0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
116e0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
116f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11700 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
11710 20 20 75 36 34 20 6e 44 61 74 61 20 3d 20 30 3b    u64 nData = 0;
11720 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11730 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
11740 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
11750 6e 74 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  nt nHdr = 0;    
11760 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11770 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
11780 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 75 36  er space */.  u6
11790 34 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20  4 nByte = 0;    
117a0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
117b0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
117c0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
117d0 20 69 6e 74 20 6e 5a 65 72 6f 20 3d 20 30 3b 20   int nZero = 0; 
117e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
117f0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
11800 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
11810 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11820 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
11830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11840 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
11850 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
11860 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
11870 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
11880 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
11890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
118a0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
118b0 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
118c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
118d0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
118e0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
118f0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
11900 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
11910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11920 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
11930 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
11940 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
11950 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
11960 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
11970 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
11980 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
11990 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
119a0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
119b0 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
119c0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
119d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
119e0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
119f0 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 0a 20 20 6e  Record[] */..  n
11a00 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
11a10 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
11a20 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
11a30 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
11a40 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
11a50 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
11a60 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 61 74 61 30  nMem );.  pData0
11a70 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 6e 46 69 65   = &p->aMem[nFie
11a80 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
11a90 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
11aa0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
11ab0 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
11ac0 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
11ad0 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
11ae0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
11af0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
11b00 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
11b10 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
11b20 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
11b30 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
11b40 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
11b50 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
11b60 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
11b70 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
11b80 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 69 6e   pRec++){.    in
11b90 74 20 6c 65 6e 3b 0a 20 20 20 20 69 66 28 20 7a  t len;.    if( z
11ba0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
11bb0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
11bc0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
11bd0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
11be0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
11bf0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
11c00 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
11c10 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
11c20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11c30 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
11c40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
11c50 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
11c60 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
11c70 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
11c80 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
11c90 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
11ca0 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
11cb0 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
11cc0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
11cd0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
11ce0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
11cf0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
11d00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
11d10 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
11d20 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
11d30 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
11d40 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
11d50 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
11d60 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
11d70 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
11d80 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
11d90 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
11da0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
11db0 63 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d 65 6c 73  c->u.i;.    }els
11dc0 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20  e if( len ){.   
11dd0 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
11de0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64    }.  }..  /* Ad
11df0 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
11e00 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
11e10 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
11e20 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72  /.  nHdr += nVar
11e30 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
11e40 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
11e50 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
11e60 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
11e70 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b  r) ){.    nHdr++
11e80 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
11e90 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f  nHdr+nData-nZero
11ea0 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
11eb0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
11ec0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
11ed0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
11ee0 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
11ef0 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
11f00 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
11f10 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
11f20 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
11f30 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
11f40 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
11f50 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
11f60 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
11f70 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
11f80 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
11f90 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
11fa0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
11fb0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
11fc0 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
11fd0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
11fe0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
11ff0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
12000 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
12010 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
12020 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
12030 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
12040 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
12050 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  >p3];.  if( sqli
12060 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
12070 4f 75 74 2c 20 6e 42 79 74 65 2c 20 30 29 20 29  Out, nByte, 0) )
12080 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
12090 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
120a0 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
120b0 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
120c0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
120d0 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
120e0 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
120f0 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70  r);.  for(pRec=p
12100 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
12110 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
12120 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
12130 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12140 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
12150 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b  format);.    i +
12160 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a  = putVarint32(&z
12170 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65  NewRecord[i], se
12180 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20  rial_type);     
12190 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
121a0 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65  */.  }.  for(pRe
121b0 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
121c0 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20  pLast; pRec++){ 
121d0 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20   /* serial data 
121e0 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69  */.    i += sqli
121f0 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
12200 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
12210 20 6e 42 79 74 65 2d 69 2c 20 70 52 65 63 2c 20   nByte-i, pRec, 
12220 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
12230 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  }.  assert( i==n
12240 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
12250 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
12260 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
12270 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
12280 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
12290 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
122a0 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
122b0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
122c0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
122d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 5a 65 72  pOut->u.i = nZer
122e0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
122f0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
12300 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
12310 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
12320 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
12330 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
12340 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
12350 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
12360 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
12370 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
12380 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
12390 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
123a0 63 6f 64 65 3a 20 53 74 61 74 65 6d 65 6e 74 20  code: Statement 
123b0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
123c0 20 42 65 67 69 6e 20 61 6e 20 69 6e 64 69 76 69   Begin an indivi
123d0 64 75 61 6c 20 73 74 61 74 65 6d 65 6e 74 20 74  dual statement t
123e0 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 63 68  ransaction which
123f0 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 6c 61   is part of a la
12400 72 67 65 72 0a 2a 2a 20 74 72 61 6e 73 61 63 74  rger.** transact
12410 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ion.  This is ne
12420 65 64 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  eded so that the
12430 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61   statement.** ca
12440 6e 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  n be rolled back
12450 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
12460 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
12470 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
12480 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
12490 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 74 61 74  ction.  The stat
124a0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
124b0 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  n will automatic
124c0 61 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77  ally.** commit w
124d0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
124e0 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ts..**.** If the
124f0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12500 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
12510 79 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  y in autocommit 
12520 6d 6f 64 65 20 28 74 68 61 74 20 0a 2a 2a 20 69  mode (that .** i
12530 73 20 74 6f 20 73 61 79 2c 20 69 66 20 69 74 20  s to say, if it 
12540 69 73 20 69 6e 20 62 65 74 77 65 65 6e 20 42 45  is in between BE
12550 47 49 4e 20 61 6e 64 20 43 4f 4d 4d 49 54 29 0a  GIN and COMMIT).
12560 2a 2a 20 61 6e 64 20 69 66 20 74 68 65 72 65 20  ** and if there 
12570 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63 74  are no other act
12580 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ive statements o
12590 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
125a0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
125b0 6e 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 65  n, then this ope
125c0 72 61 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  ration is a no-o
125d0 70 2e 20 20 4e 6f 20 73 74 61 74 65 6d 65 6e 74  p.  No statement
125e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
125f0 69 73 20 6e 65 65 64 65 64 20 73 69 6e 63 65 20  is needed since 
12600 61 6e 79 20 65 72 72 6f 72 20 63 61 6e 20 75 73  any error can us
12610 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20 52 4f 4c  e the normal ROL
12620 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 20 74 6f  LBACK process to
12630 0a 2a 2a 20 75 6e 64 6f 20 63 68 61 6e 67 65 73  .** undo changes
12640 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 73 74 61  ..**.** If a sta
12650 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
12660 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 74  on is started, t
12670 68 65 6e 20 61 20 73 74 61 74 65 6d 65 6e 74 20  hen a statement 
12680 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20  journal file.** 
12690 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65  will be allocate
126a0 64 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  d and initialize
126b0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61  d..**.** The sta
126c0 74 65 6d 65 6e 74 20 69 73 20 62 65 67 75 6e 20  tement is begun 
126d0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
126e0 66 69 6c 65 20 77 69 74 68 20 69 6e 64 65 78 20  file with index 
126f0 50 31 2e 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a  P1.  The main.**
12700 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
12710 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
12720 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20 75 73   and the file us
12730 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
12740 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61   tables.** has a
12750 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f  n index of 1..*/
12760 0a 63 61 73 65 20 4f 50 5f 53 74 61 74 65 6d 65  .case OP_Stateme
12770 6e 74 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  nt: {.  if( db->
12780 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
12790 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
127a0 6e 74 3e 31 20 29 7b 0a 20 20 20 20 69 6e 74 20  nt>1 ){.    int 
127b0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  i = pOp->p1;.   
127c0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20   Btree *pBt;.   
127d0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
127e0 20 69 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20   i<db->nDb );.  
127f0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
12800 62 5b 69 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  b[i].pBt!=0 );. 
12810 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
12820 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 61 73 73  [i].pBt;.    ass
12830 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
12840 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
12850 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
12860 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
12870 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 20  1<<i))!=0 );.   
12880 20 69 66 28 20 21 73 71 6c 69 74 65 33 42 74 72   if( !sqlite3Btr
12890 65 65 49 73 49 6e 53 74 6d 74 28 70 42 74 29 20  eeIsInStmt(pBt) 
128a0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
128b0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
128c0 74 6d 74 28 70 42 74 29 3b 0a 20 20 20 20 20 20  tmt(pBt);.      
128d0 70 2d 3e 6f 70 65 6e 65 64 53 74 61 74 65 6d 65  p->openedStateme
128e0 6e 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  nt = 1;.    }.  
128f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12900 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
12910 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mit P1 P2 * * *.
12920 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61  **.** Set the da
12930 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d  tabase auto-comm
12940 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31  it flag to P1 (1
12950 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73   or 0). If P2 is
12960 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62   true, roll.** b
12970 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c  ack any currentl
12980 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74  y active btree t
12990 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20  ransactions. If 
129a0 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
129b0 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61  tive.** VMs (apa
129c0 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65  rt from this one
129d0 29 2c 20 74 68 65 6e 20 74 68 65 20 43 4f 4d 4d  ), then the COMM
129e0 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 73  IT or ROLLBACK s
129f0 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a  tatement fails..
12a00 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
12a10 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
12a20 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
12a30 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
12a40 6d 69 74 3a 20 7b 0a 20 20 75 38 20 69 20 3d 20  mit: {.  u8 i = 
12a50 70 4f 70 2d 3e 70 31 3b 0a 20 20 75 38 20 72 6f  pOp->p1;.  u8 ro
12a60 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
12a70 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  ;..  assert( i==
12a80 31 20 7c 7c 20 69 3d 3d 30 20 29 3b 0a 20 20 61  1 || i==0 );.  a
12a90 73 73 65 72 74 28 20 69 3d 3d 31 20 7c 7c 20 72  ssert( i==1 || r
12aa0 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 0a 20  ollback==0 );.. 
12ab0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
12ac0 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
12ad0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
12ae0 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
12af0 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 64 62 2d  ve */..  if( db-
12b00 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
12b10 20 26 26 20 69 20 26 26 20 21 64 62 2d 3e 61 75   && i && !db->au
12b20 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
12b30 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
12b40 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
12b50 73 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  s a COMMIT or RO
12b60 4c 4c 42 41 43 4b 2c 20 6f 74 68 65 72 20 56 4d  LLBACK, other VM
12b70 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
12b80 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
12b90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
12ba0 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
12bb0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
12bc0 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
12bd0 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
12be0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
12bf0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
12c00 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
12c10 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
12c20 20 22 63 61 6e 6e 6f 74 20 25 73 20 74 72 61 6e   "cannot %s tran
12c30 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
12c40 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
12c50 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
12c60 2c 0a 20 20 20 20 20 20 20 20 72 6f 6c 6c 62 61  ,.        rollba
12c70 63 6b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 20  ck ? "rollback" 
12c80 3a 20 22 63 6f 6d 6d 69 74 22 29 3b 0a 20 20 20  : "commit");.   
12c90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
12ca0 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  OR;.  }else if( 
12cb0 69 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  i!=db->autoCommi
12cc0 74 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  t ){.    if( pOp
12cd0 2d 3e 70 32 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p2 ){.      as
12ce0 73 65 72 74 28 20 69 3d 3d 31 20 29 3b 0a 20 20  sert( i==1 );.  
12cf0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
12d00 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20  ackAll(db);.    
12d10 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
12d20 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 1;.    }else{
12d30 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
12d40 6f 6d 6d 69 74 20 3d 20 69 3b 0a 20 20 20 20 20  ommit = i;.     
12d50 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
12d60 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
12d70 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
12d80 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
12d90 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
12da0 69 74 20 3d 20 31 2d 69 3b 0a 20 20 20 20 20 20  it = 1-i;.      
12db0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
12dc0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
12dd0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
12de0 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
12df0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 72    }.    if( p->r
12e00 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
12e10 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
12e20 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
12e30 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
12e40 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
12e50 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
12e60 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
12e70 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
12e80 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
12e90 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
12ea0 21 69 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  !i)?"cannot star
12eb0 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
12ec0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
12ed0 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
12ee0 28 72 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  (rollback)?"cann
12ef0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
12f00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
12f10 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
12f20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
12f30 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
12f40 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
12f50 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
12f60 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
12f70 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
12f80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12f90 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
12fa0 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  n P1 P2 * * *.**
12fb0 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
12fc0 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72  saction.  The tr
12fd0 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77  ansaction ends w
12fe0 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20  hen a Commit or 
12ff0 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f  Rollback.** opco
13000 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  de is encountere
13010 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  d.  Depending on
13020 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
13030 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a   setting, the.**
13040 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
13050 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65  ht also be rolle
13060 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72  d back if an err
13070 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
13080 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
13090 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
130a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
130b0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
130c0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
130d0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
130e0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
130f0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
13100 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
13110 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
13120 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
13130 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
13140 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
13150 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
13160 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
13170 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
13180 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
13190 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
131a0 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56  arted.  A RESERV
131b0 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62  ED lock is.** ob
131c0 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
131d0 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
131e0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
131f0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
13200 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72    No.** other pr
13210 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20  ocess can start 
13220 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72  another write tr
13230 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20  ansaction while 
13240 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
13250 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e   is.** underway.
13260 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69    Starting a wri
13270 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
13280 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f  lso creates a ro
13290 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
132a0 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73  A.** write trans
132b0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
132c0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e  tarted before an
132d0 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  y changes can be
132e0 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20   made to the.** 
132f0 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32  database.  If P2
13300 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65 72   is 2 or greater
13310 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49   then an EXCLUSI
13320 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20  VE lock is also 
13330 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74  obtained.** on t
13340 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  he file..**.** I
13350 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
13360 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69  en a read-lock i
13370 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  s obtained on th
13380 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
13390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
133a0 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  saction: {.  int
133b0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
133c0 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
133d0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
133e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
133f0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
13400 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30  ask & (1<<i))!=0
13410 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
13420 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 0a 20 20 69  aDb[i].pBt;..  i
13430 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
13440 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
13450 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
13460 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28  Op->p2);.    if(
13470 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
13480 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
13490 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72  = pc;.      p->r
134a0 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
134b0 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
134c0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
134d0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
134e0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
134f0 3d 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59  =SQLITE_READONLY
13500 20 2f 2a 20 26 26 20 72 63 21 3d 53 51 4c 49 54   /* && rc!=SQLIT
13510 45 5f 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20 20  E_BUSY */ ){.   
13520 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
13530 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
13540 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
13550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
13560 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
13570 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
13580 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
13590 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
135a0 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
135b0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
135c0 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20 74 68 65  .** P3==0 is the
135d0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
135e0 20 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 64    P3==1 is the d
135f0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
13600 2a 2a 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  ** P3==2 is the 
13610 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
13620 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
13630 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
13640 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
13650 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
13660 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
13670 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
13680 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
13690 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
136a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
136b0 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
136c0 74 68 69 73 20 69 73 20 61 20 72 65 71 75 65 73  this is a reques
136d0 74 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 69  t to read the si
136e0 7a 65 20 6f 66 20 61 0a 2a 2a 20 64 61 74 61 62  ze of a.** datab
136f0 61 73 65 73 20 66 72 65 65 2d 6c 69 73 74 2e 20  ases free-list. 
13700 50 33 20 6d 75 73 74 20 62 65 20 73 65 74 20 74  P3 must be set t
13710 6f 20 31 20 69 6e 20 74 68 69 73 20 63 61 73 65  o 1 in this case
13720 2e 20 54 68 65 20 61 63 74 75 61 6c 0a 2a 2a 20  . The actual.** 
13730 64 61 74 61 62 61 73 65 20 61 63 63 65 73 73 65  database accesse
13740 64 20 69 73 20 28 28 50 31 2b 31 29 2a 2d 31 29  d is ((P1+1)*-1)
13750 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61  . For example, a
13760 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P1 parameter of
13770 20 2d 31 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   -1.** correspon
13780 64 73 20 74 6f 20 64 61 74 61 62 61 73 65 20 30  ds to database 0
13790 20 28 22 6d 61 69 6e 22 29 2c 20 61 20 50 31 20   ("main"), a P1 
137a0 6f 66 20 2d 32 20 69 73 20 64 61 74 61 62 61 73  of -2 is databas
137b0 65 20 31 20 28 22 74 65 6d 70 22 29 2e 0a 2a 2a  e 1 ("temp")..**
137c0 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
137d0 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
137e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
137f0 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
13800 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
13810 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
13820 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
13830 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
13840 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
13850 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
13860 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
13870 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
13880 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
13890 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
138a0 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
138b0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
138c0 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  nt iCookie = pOp
138d0 2d 3e 70 33 3b 0a 0a 20 20 61 73 73 65 72 74 28  ->p3;..  assert(
138e0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
138f0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
13900 20 20 69 66 28 20 69 44 62 3c 30 20 29 7b 0a 20    if( iDb<0 ){. 
13910 20 20 20 69 44 62 20 3d 20 28 2d 31 2a 28 69 44     iDb = (-1*(iD
13920 62 2b 31 29 29 3b 0a 20 20 20 20 69 43 6f 6f 6b  b+1));.    iCook
13930 69 65 20 2a 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20  ie *= -1;.  }.  
13940 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
13950 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
13960 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
13970 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
13980 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
13990 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
139a0 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 2f 2a  iDb))!=0 );.  /*
139b0 20 54 68 65 20 69 6e 64 65 78 69 6e 67 20 6f 66   The indexing of
139c0 20 6d 65 74 61 20 76 61 6c 75 65 73 20 61 74 20   meta values at 
139d0 74 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72  the schema layer
139e0 20 69 73 20 6f 66 66 20 62 79 20 6f 6e 65 20 66   is off by one f
139f0 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20 69 6e 64  rom.  ** the ind
13a00 65 78 69 6e 67 20 69 6e 20 74 68 65 20 62 74 72  exing in the btr
13a10 65 65 20 6c 61 79 65 72 2e 20 20 54 68 65 20 62  ee layer.  The b
13a20 74 72 65 65 20 63 6f 6e 73 69 64 65 72 73 20 6d  tree considers m
13a30 65 74 61 5b 30 5d 20 74 6f 0a 20 20 2a 2a 20 62  eta[0] to.  ** b
13a40 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
13a50 66 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68  free pages in th
13a60 65 20 64 61 74 61 62 61 73 65 20 28 61 20 72 65  e database (a re
13a70 61 64 2d 6f 6e 6c 79 20 76 61 6c 75 65 29 0a 20  ad-only value). 
13a80 20 2a 2a 20 61 6e 64 20 6d 65 74 61 5b 31 5d 20   ** and meta[1] 
13a90 74 6f 20 62 65 20 74 68 65 20 73 63 68 65 6d 61  to be the schema
13aa0 20 63 6f 6f 6b 69 65 2e 20 20 54 68 65 20 73 63   cookie.  The sc
13ab0 68 65 6d 61 20 6c 61 79 65 72 20 63 6f 6e 73 69  hema layer consi
13ac0 64 65 72 73 0a 20 20 2a 2a 20 6d 65 74 61 5b 31  ders.  ** meta[1
13ad0 5d 20 74 6f 20 62 65 20 74 68 65 20 73 63 68 65  ] to be the sche
13ae0 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 53 6f 20 77  ma cookie.  So w
13af0 65 20 68 61 76 65 20 74 6f 20 73 68 69 66 74 20  e have to shift 
13b00 74 68 65 20 69 6e 64 65 78 0a 20 20 2a 2a 20 62  the index.  ** b
13b10 79 20 6f 6e 65 20 69 6e 20 74 68 65 20 66 6f 6c  y one in the fol
13b20 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
13b30 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ..  */.  rc = sq
13b40 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
13b50 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
13b60 42 74 2c 20 31 20 2b 20 69 43 6f 6f 6b 69 65 2c  Bt, 1 + iCookie,
13b70 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
13b80 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
13b90 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Meta;.  MemSetTy
13ba0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
13bb0 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
13bc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
13bd0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
13be0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
13bf0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
13c00 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
13c10 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
13c20 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
13c30 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
13c40 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
13c50 0a 2a 2a 20 50 32 3d 3d 30 20 69 73 20 74 68 65  .** P2==0 is the
13c60 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
13c70 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 64    P2==1 is the d
13c80 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
13c90 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
13ca0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
13cb0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
13cc0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
13cd0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
13ce0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
13cf0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
13d00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
13d10 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
13d20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
13d30 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
13d40 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
13d50 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
13d60 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
13d70 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
13d80 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
13d90 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
13da0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
13db0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
13dc0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
13dd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13de0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
13df0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
13e00 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
13e10 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
13e20 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
13e30 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
13e40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
13e50 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 73  b->pBt!=0 );.  s
13e60 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
13e70 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
13e80 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
13e90 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
13ea0 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
13eb0 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
13ec0 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
13ed0 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 31 2b  eta(pDb->pBt, 1+
13ee0 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49  pOp->p2, (int)pI
13ef0 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20  n3->u.i);.  if( 
13f00 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
13f10 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63    /* When the sc
13f20 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e  hema cookie chan
13f30 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ges, record the 
13f40 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72  new cookie inter
13f50 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62  nally */.    pDb
13f60 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
13f70 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 49 6e 33 2d  a_cookie = pIn3-
13f80 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
13f90 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
13fa0 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
13fb0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
13fc0 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  ==1 ){.    /* Re
13fd0 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
13fe0 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
13ff0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
14000 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
14010 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
14020 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
14030 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
14040 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
14050 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
14060 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
14070 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
14080 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
14090 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
140a0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
140b0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
140c0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
140d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
140e0 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79  * Opcode: Verify
140f0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a  Cookie P1 P2 *.*
14100 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
14110 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64  alue of global d
14120 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65  atabase paramete
14130 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a  r number 0 (the.
14140 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  ** schema versio
14150 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65  n) and make sure
14160 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20   it is equal to 
14170 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74  P2.  .** P1 is t
14180 68 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62  he database numb
14190 65 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f  er which is 0 fo
141a0 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
141b0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  ase file.** and 
141c0 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68  1 for the file h
141d0 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  olding temporary
141e0 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65   tables and some
141f0 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a   higher number.*
14200 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20  * for auxiliary 
14210 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
14220 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
14230 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
14240 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
14250 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
14260 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
14270 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
14280 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
14290 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
142a0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
142b0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
142c0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
142d0 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
142e0 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65  ema..**.** Eithe
142f0 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  r a transaction 
14300 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65  needs to have be
14310 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e  en started or an
14320 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a   OP_Open needs.*
14330 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  * to be executed
14340 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61   (to establish a
14350 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f   read lock) befo
14360 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  re this opcode i
14370 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f  s.** invoked..*/
14380 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43  .case OP_VerifyC
14390 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69  ookie: {.  int i
143a0 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70  Meta;.  Btree *p
143b0 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Bt;.  assert( pO
143c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
143d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
143e0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
143f0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
14400 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
14410 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
14420 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28  ->p1].pBt;.  if(
14430 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
14440 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
14450 4d 65 74 61 28 70 42 74 2c 20 31 2c 20 28 75 33  Meta(pBt, 1, (u3
14460 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
14470 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53  else{.    rc = S
14480 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d  QLITE_OK;.    iM
14490 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
144a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
144b0 20 26 26 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e   && iMeta!=pOp->
144c0 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p2 ){.    sqlite
144d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
144e0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
144f0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
14500 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
14510 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
14520 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
14530 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
14540 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
14550 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14560 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
14570 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
14580 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
14590 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
145a0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
145b0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
145c0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
145d0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
145e0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
145f0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
14600 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
14610 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
14620 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
14630 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
14640 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
14650 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
14660 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
14670 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
14680 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
14690 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
146a0 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
146b0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
146c0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
146d0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
146e0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
146f0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
14700 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
14710 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
14720 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
14730 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
14740 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
14750 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
14760 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
14770 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
14780 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
14790 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
147a0 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
147b0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
147c0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
147d0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
147e0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
147f0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
14800 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
14810 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
14820 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
14830 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
14840 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
14850 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
14860 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
14870 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  p1);.    }..    
14880 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14890 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
148a0 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  db);.    rc = SQ
148b0 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
148c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
148d0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
148e0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
148f0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
14900 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
14910 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
14920 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
14930 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
14940 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
14950 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
14960 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
14970 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
14980 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
14990 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
149a0 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
149b0 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
149c0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
149d0 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
149e0 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
149f0 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
14a00 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
14a10 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
14a20 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
14a30 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
14a40 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
14a50 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
14a60 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
14a70 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
14a80 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
14a90 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
14aa0 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
14ab0 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
14ac0 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
14ad0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14ae0 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
14af0 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
14b00 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
14b10 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
14b20 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
14b30 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
14b40 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
14b50 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
14b60 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
14b70 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
14b80 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
14b90 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
14ba0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
14bb0 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
14bc0 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
14bd0 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
14be0 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
14bf0 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
14c00 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
14c10 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
14c20 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
14c30 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
14c40 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
14c50 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
14c60 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
14c70 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
14c80 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
14c90 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
14ca0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
14cb0 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
14cc0 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
14cd0 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
14ce0 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
14cf0 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
14d00 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
14d10 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
14d20 50 34 20 76 61 6c 75 65 20 69 73 20 61 20 70 6f  P4 value is a po
14d30 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
14d40 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
14d50 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a 2a 2a  t defines the.**
14d60 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
14d70 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
14d80 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50 34 20  of indices.  P4 
14d90 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75 72 73  is NULL for curs
14da0 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  ors.** that are 
14db0 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  not pointing to 
14dc0 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  indices..**.** S
14dd0 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74  ee also OpenWrit
14de0 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
14df0 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
14e00 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
14e10 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
14e20 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
14e30 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
14e40 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
14e50 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
14e60 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
14e70 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
14e80 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
14e90 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
14ea0 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
14eb0 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 61 20  e P4 value is a 
14ec0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
14ed0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
14ee0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a  hat defines the.
14ef0 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  ** content and c
14f00 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
14f10 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50  e of indices.  P
14f20 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75  4 is NULL for cu
14f30 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72  rsors.** that ar
14f40 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74  e not pointing t
14f50 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a  o indices..**.**
14f60 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
14f70 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
14f80 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
14f90 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
14fa0 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
14fb0 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
14fc0 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
14fd0 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
14fe0 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
14ff0 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
15000 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
15010 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
15020 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
15030 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
15040 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
15050 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
15060 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
15070 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
15080 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d  ->p1;.  int p2 =
15090 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20   pOp->p2;.  int 
150a0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
150b0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
150c0 74 72 65 65 20 2a 70 58 3b 0a 20 20 43 75 72 73  tree *pX;.  Curs
150d0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
150e0 70 44 62 3b 0a 20 20 0a 20 20 61 73 73 65 72 74  pDb;.  .  assert
150f0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
15100 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
15110 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
15120 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
15130 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
15140 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
15150 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
15160 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
15170 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
15180 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
15190 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
151a0 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  1;.    if( pDb->
151b0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
151c0 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
151d0 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
151e0 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
151f0 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
15200 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
15210 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
15220 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
15230 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
15240 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
15250 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
15260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
15270 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
15280 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
15290 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  p2];.    sqlite3
152a0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
152b0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
152c0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
152d0 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29   assert( p2>=2 )
152e0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
152f0 69 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d  i>=0 );.  pCur =
15300 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
15310 70 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20  p, i, &pOp[-1], 
15320 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
15330 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
15340 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
15350 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
15360 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
15370 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
15380 6c 61 67 2c 20 70 4f 70 2d 3e 70 34 2e 70 2c 20  lag, pOp->p4.p, 
15390 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
153a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
153b0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
153c0 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  .    pCur->pKeyI
153d0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
153e0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 43 75 72  eyInfo;.    pCur
153f0 2d 3e 70 49 6e 63 72 4b 65 79 20 3d 20 26 70 43  ->pIncrKey = &pC
15400 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 69 6e  ur->pKeyInfo->in
15410 63 72 4b 65 79 3b 0a 20 20 20 20 70 43 75 72 2d  crKey;.    pCur-
15420 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
15430 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 7d   ENC(p->db);.  }
15440 65 6c 73 65 7b 0a 20 20 20 20 70 43 75 72 2d 3e  else{.    pCur->
15450 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
15460 20 20 70 43 75 72 2d 3e 70 49 6e 63 72 4b 65 79    pCur->pIncrKey
15470 20 3d 20 26 70 43 75 72 2d 3e 62 6f 67 75 73 49   = &pCur->bogusI
15480 6e 63 72 4b 65 79 3b 0a 20 20 7d 0a 20 20 73 77  ncrKey;.  }.  sw
15490 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
154a0 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
154b0 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20  : {.      p->pc 
154c0 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72  = pc;.      p->r
154d0 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
154e0 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
154f0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
15500 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c    }.    case SQL
15510 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20  ITE_OK: {.      
15520 69 6e 74 20 66 6c 61 67 73 20 3d 20 73 71 6c 69  int flags = sqli
15530 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
15540 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
15550 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
15560 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68  ecking.  Only th
15570 65 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69 74  e lower four bit
15580 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 62  s of the flags b
15590 79 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20 20  yte should.     
155a0 20 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42 69   ** be used.  Bi
155b0 74 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29 20  t 3 (mask 0x08) 
155c0 69 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c 65  is unpredictable
155d0 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20 62  .  The lower 3 b
155e0 69 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61  its.      ** (ma
155f0 73 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64 20  sk 0x07) should 
15600 62 65 20 65 69 74 68 65 72 20 35 20 28 69 6e 74  be either 5 (int
15610 6b 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f 72  key+leafdata for
15620 20 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20 20   tables) or.    
15630 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74 61    ** 2 (zerodata
15640 20 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20 20   for indices).  
15650 49 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69  If these conditi
15660 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74 20  ons are not met 
15670 69 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20  it can.      ** 
15680 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20 77  only mean that w
15690 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69  e are dealing wi
156a0 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
156b0 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20  abase file.     
156c0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 66   */.      if( (f
156d0 6c 61 67 73 20 26 20 30 78 66 30 29 21 3d 30 20  lags & 0xf0)!=0 
156e0 7c 7c 20 28 28 66 6c 61 67 73 20 26 20 30 78 30  || ((flags & 0x0
156f0 37 29 21 3d 35 20 26 26 20 28 66 6c 61 67 73 20  7)!=5 && (flags 
15700 26 20 30 78 30 37 29 21 3d 32 29 20 29 7b 0a 20  & 0x07)!=2) ){. 
15710 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15720 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15730 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15740 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15750 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
15760 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
15770 28 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f 49  (flags & BTREE_I
15780 4e 54 4b 45 59 29 21 3d 30 3b 0a 20 20 20 20 20  NTKEY)!=0;.     
15790 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
157a0 20 28 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f   (flags & BTREE_
157b0 5a 45 52 4f 44 41 54 41 29 21 3d 30 3b 0a 20 20  ZERODATA)!=0;.  
157c0 20 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20      /* If P4==0 
157d0 69 74 20 6d 65 61 6e 73 20 77 65 20 61 72 65 20  it means we are 
157e0 65 78 70 65 63 74 65 64 20 74 6f 20 6f 70 65 6e  expected to open
157f0 20 61 20 74 61 62 6c 65 2e 20 20 49 66 20 50 34   a table.  If P4
15800 21 3d 30 20 74 68 65 6e 0a 20 20 20 20 20 20 2a  !=0 then.      *
15810 2a 20 77 65 20 65 78 70 65 63 74 20 74 6f 20 62  * we expect to b
15820 65 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64  e opening an ind
15830 65 78 2e 20 20 49 66 20 74 68 69 73 20 69 73 20  ex.  If this is 
15840 6e 6f 74 20 77 68 61 74 20 68 61 70 70 65 6e 65  not what happene
15850 64 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  d,.      ** then
15860 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
15870 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a   corrupt.      *
15880 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 75  /.      if( (pCu
15890 72 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70 4f  r->isTable && pO
158a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
158b0 59 49 4e 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c  YINFO).       ||
158c0 20 28 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20   (pCur->isIndex 
158d0 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d  && pOp->p4type!=
158e0 50 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20  P4_KEYINFO) ){. 
158f0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15900 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15910 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15920 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15930 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
15940 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
15950 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50   case SQLITE_EMP
15960 54 59 3a 20 7b 0a 20 20 20 20 20 20 70 43 75 72  TY: {.      pCur
15970 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
15980 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
15990 4e 46 4f 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  NFO;.      pCur-
159a0 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72  >isIndex = !pCur
159b0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20 20 20  ->isTable;.     
159c0 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d   pCur->pCursor =
159d0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   0;.      rc = S
159e0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
159f0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
15a00 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
15a10 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
15a20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
15a30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
15a40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
15a50 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
15a60 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
15a70 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
15a80 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
15a90 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
15aa0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
15ab0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
15ac0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
15ad0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
15ae0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
15af0 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f 72 20  he transient or 
15b00 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
15b10 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
15b20 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
15b30 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
15b40 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
15b50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
15b60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69  olumns in the vi
15b70 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  rtual table..** 
15b80 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
15b90 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
15ba0 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
15bb0 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
15bc0 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
15bd0 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
15be0 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
15bf0 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
15c00 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
15c10 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
15c20 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
15c30 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
15c40 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
15c50 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
15c60 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
15c70 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
15c80 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
15c90 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
15ca0 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
15cb0 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
15cc0 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
15cd0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
15ce0 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
15cf0 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
15d00 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
15d10 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
15d20 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
15d30 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
15d40 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
15d50 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
15d60 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f  l-table idea..*/
15d70 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
15d80 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20  emeral: {.  int 
15d90 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43  i = pOp->p1;.  C
15da0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74  ursor *pCx;.  st
15db0 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f  atic const int o
15dc0 70 65 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  penFlags = .    
15dd0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
15de0 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
15df0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
15e00 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
15e10 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
15e20 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
15e30 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
15e40 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
15e50 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
15e60 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _DB;..  assert( 
15e70 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  i>=0 );.  pCx = 
15e80 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
15e90 2c 20 69 2c 20 70 4f 70 2c 20 2d 31 2c 20 31 29  , i, pOp, -1, 1)
15ea0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
15eb0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
15ec0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
15ed0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
15ee0 42 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c  BtreeFactory(db,
15ef0 20 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45   0, 1, SQLITE_DE
15f00 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45  FAULT_TEMP_CACHE
15f10 5f 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73  _SIZE, openFlags
15f20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43               &pC
15f40 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72  x->pBt);.  if( r
15f50 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
15f60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15f70 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
15f80 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
15f90 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
15fa0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
15fb0 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
15fc0 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
15fd0 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
15fe0 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
15ff0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
16000 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
16010 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20   BTREE_ZERODATA 
16020 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
16030 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
16040 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
16050 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
16060 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
16070 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
16080 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
16090 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
160a0 31 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62  1 (an INTKEY tab
160b0 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
160c0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  if( pOp->p4.pKey
160d0 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e  Info ){.      in
160e0 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
160f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
16100 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
16110 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
16120 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
16130 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70  ble(pCx->pBt, &p
16140 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44  gno, BTREE_ZEROD
16150 41 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28  ATA); .      if(
16160 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
16170 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
16180 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
16190 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
161a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
161b0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
161c0 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20  t, pgno, 1, .   
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65               (Ke
161f0 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a  yInfo*)pOp->p4.z
16200 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
16210 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
16220 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
16230 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  .pKeyInfo;.     
16240 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
16250 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
16260 62 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  b);.        pCx-
16270 3e 70 49 6e 63 72 4b 65 79 20 3d 20 26 70 43 78  >pIncrKey = &pCx
16280 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 69 6e 63 72  ->pKeyInfo->incr
16290 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Key;.      }.   
162a0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
162b0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
162c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
162d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
162e0 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
162f0 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
16300 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
16310 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
16320 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 49 6e  ;.      pCx->pIn
16330 63 72 4b 65 79 20 3d 20 26 70 43 78 2d 3e 62 6f  crKey = &pCx->bo
16340 67 75 73 49 6e 63 72 4b 65 79 3b 0a 20 20 20 20  gusIncrKey;.    
16350 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49  }.  }.  pCx->isI
16360 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54  ndex = !pCx->isT
16370 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  able;.  break;.}
16380 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
16390 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 2a 20  nPseudo P1 P2 * 
163a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
163b0 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
163c0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
163d0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
163e0 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
163f0 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
16400 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 77  Any attempt to w
16410 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20 72 6f  rite a second ro
16420 77 20 6f 66 20 64 61 74 61 20 63 61 75 73 65 73  w of data causes
16430 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 72 6f   the.** first ro
16440 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e  w to be deleted.
16450 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 64 65    All data is de
16460 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 63  leted when the c
16470 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f 73  ursor is.** clos
16480 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  ed..**.** A pseu
16490 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
164a0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
164b0 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 68 6f  is useful for ho
164c0 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 45 57  lding the.** NEW
164d0 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73 20 69   or OLD tables i
164e0 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20 41 6c  n a trigger.  Al
164f0 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  so used to hold 
16500 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  the a single.** 
16510 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
16520 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
16530 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
16540 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
16550 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
16560 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
16570 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
16580 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 4f  de..**.** When O
16590 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78 65 63  P_Insert is exec
165a0 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74 20 61  uted to insert a
165b0 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65 20 70   row in to the p
165c0 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a 2a 20  seudo table,.** 
165d0 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
165e0 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72 20 6d   cursor may or m
165f0 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74 27 73  ay not make it's
16600 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74 68 65   own copy of the
16610 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77  .** original row
16620 20 64 61 74 61 2e 20 49 66 20 50 32 20 69 73 20   data. If P2 is 
16630 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73 65 75  0, then the pseu
16640 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f  do-table will co
16650 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  py the.** origin
16660 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f 74 68  al row data. Oth
16670 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e 74 65  erwise, a pointe
16680 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 61  r to the origina
16690 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a 2a 2a  l memory cell.**
166a0 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e 20 74   is stored. In t
166b0 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 76 64  his case, the vd
166c0 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  be program must 
166d0 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
166e0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
166f0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
16700 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74 20 6f  ow data is not o
16710 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74 69 6c  verwritten until
16720 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f 20 74   the.** pseudo t
16730 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 20 28  able is closed (
16740 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20  or a new row is 
16750 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 69 74  inserted into it
16760 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  )..*/.case OP_Op
16770 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69 6e  enPseudo: {.  in
16780 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
16790 20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20   Cursor *pCx;.  
167a0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a  assert( i>=0 );.
167b0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
167c0 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f  Cursor(p, i, &pO
167d0 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20  p[-1], -1, 0);. 
167e0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
167f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
16800 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
16810 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
16820 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 65 70  e = 1;.  pCx->ep
16830 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 3d  hemPseudoTable =
16840 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
16850 3e 70 49 6e 63 72 4b 65 79 20 3d 20 26 70 43 78  >pIncrKey = &pCx
16860 2d 3e 62 6f 67 75 73 49 6e 63 72 4b 65 79 3b 0a  ->bogusIncrKey;.
16870 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
16880 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64   1;.  pCx->isInd
16890 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ex = 0;.  break;
168a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
168b0 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
168c0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
168d0 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
168e0 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
168f0 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
16900 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
16910 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
16920 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
16930 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
16940 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
16950 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  1;.  assert( i>=
16960 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
16970 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
16980 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
16990 70 2d 3e 61 70 43 73 72 5b 69 5d 29 3b 0a 20 20  p->apCsr[i]);.  
169a0 70 2d 3e 61 70 43 73 72 5b 69 5d 20 3d 20 30 3b  p->apCsr[i] = 0;
169b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
169c0 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 47 65 20 50  Opcode: MoveGe P
169d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
169e0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
169f0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
16a00 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
16a10 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
16a20 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
16a30 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
16a40 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
16a50 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
16a60 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
16a70 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
16a80 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
16a90 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
16aa0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
16ab0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
16ac0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
16ad0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
16ae0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
16af0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
16b00 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
16b10 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
16b20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
16b30 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
16b40 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
16b50 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
16b60 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
16b70 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
16b80 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
16b90 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
16ba0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
16bb0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
16bc0 2a 20 41 20 73 70 65 63 69 61 6c 20 66 65 61 74  * A special feat
16bd0 75 72 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ure of this opco
16be0 64 65 20 28 61 6e 64 20 64 69 66 66 65 72 65 6e  de (and differen
16bf0 74 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 72 65  t from the.** re
16c00 6c 61 74 65 64 20 4f 50 5f 4d 6f 76 65 47 74 2c  lated OP_MoveGt,
16c10 20 4f 50 5f 4d 6f 76 65 4c 74 2c 20 61 6e 64 20   OP_MoveLt, and 
16c20 4f 50 5f 4d 6f 76 65 4c 65 29 20 69 73 20 74 68  OP_MoveLe) is th
16c30 61 74 20 69 66 20 50 32 20 69 73 0a 2a 2a 20 7a  at if P2 is.** z
16c40 65 72 6f 20 61 6e 64 20 50 31 20 69 73 20 61 6e  ero and P1 is an
16c50 20 53 51 4c 20 74 61 62 6c 65 20 28 61 20 62 2d   SQL table (a b-
16c60 74 72 65 65 20 77 69 74 68 20 69 6e 74 65 67 65  tree with intege
16c70 72 20 6b 65 79 73 29 20 74 68 65 6e 0a 2a 2a 20  r keys) then.** 
16c80 74 68 65 20 73 65 65 6b 20 69 73 20 64 65 66 65  the seek is defe
16c90 72 72 65 64 20 75 6e 74 69 6c 20 69 74 20 69 73  rred until it is
16ca0 20 61 63 74 75 61 6c 6c 79 20 6e 65 65 64 65 64   actually needed
16cb0 2e 20 20 49 74 20 6d 69 67 68 74 20 62 65 0a 2a  .  It might be.*
16cc0 2a 20 74 68 65 20 63 61 73 65 20 74 68 61 74 20  * the case that 
16cd0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 65  the cursor is ne
16ce0 76 65 72 20 61 63 63 65 73 73 65 64 2e 20 20 42  ver accessed.  B
16cf0 79 20 64 65 66 65 72 72 69 6e 67 20 74 68 65 0a  y deferring the.
16d00 2a 2a 20 73 65 65 6b 2c 20 77 65 20 61 76 6f 69  ** seek, we avoi
16d10 64 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65  d unnecessary se
16d20 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  eks..**.** See a
16d30 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
16d40 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
16d50 4d 6f 76 65 4c 74 2c 20 4d 6f 76 65 47 74 2c 20  MoveLt, MoveGt, 
16d60 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  MoveLe.*/./* Opc
16d70 6f 64 65 3a 20 4d 6f 76 65 47 74 20 50 31 20 50  ode: MoveGt P1 P
16d80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
16d90 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
16da0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
16db0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
16dc0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
16dd0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
16de0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
16df0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
16e00 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
16e10 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
16e20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
16e30 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
16e40 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
16e50 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
16e60 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
16e70 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
16e80 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
16e90 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
16ea0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
16eb0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
16ec0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
16ed0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
16ee0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
16ef0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
16f00 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
16f10 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
16f20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
16f30 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
16f40 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
16f50 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
16f60 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
16f70 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65  , Distinct, Move
16f80 4c 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65  Lt, MoveGe, Move
16f90 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
16fa0 20 4d 6f 76 65 4c 74 20 50 31 20 50 32 20 50 33   MoveLt P1 P2 P3
16fb0 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P4 * .**.** If 
16fc0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
16fd0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
16fe0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
16ff0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
17000 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e  , .** use the in
17010 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
17020 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
17030 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
17040 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
17050 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
17060 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
17070 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
17080 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
17090 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
170a0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
170b0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
170c0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
170d0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
170e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
170f0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
17100 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
17110 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
17120 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
17130 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
17140 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
17150 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
17160 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
17170 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
17180 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
17190 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
171a0 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65 47 65  , MoveGt, MoveGe
171b0 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , MoveLe.*/./* O
171c0 70 63 6f 64 65 3a 20 4d 6f 76 65 4c 65 20 50 31  pcode: MoveLe P1
171d0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
171e0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
171f0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
17200 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
17210 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
17220 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
17230 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
17240 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
17250 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
17260 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
17270 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
17280 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
17290 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
172a0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
172b0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
172c0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
172d0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
172e0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
172f0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
17300 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
17310 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
17320 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
17330 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
17340 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
17350 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
17360 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
17370 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
17380 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
17390 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
173a0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
173b0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
173c0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
173d0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f  nd, Distinct, Mo
173e0 76 65 47 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f  veGt, MoveGe, Mo
173f0 76 65 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  veLt.*/.case OP_
17400 4d 6f 76 65 4c 74 3a 20 20 20 20 20 20 20 20 20  MoveLt:         
17410 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
17420 63 61 73 65 20 4f 50 5f 4d 6f 76 65 4c 65 3a 20  case OP_MoveLe: 
17430 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
17440 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
17450 4d 6f 76 65 47 65 3a 20 20 20 20 20 20 20 20 20  MoveGe:         
17460 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
17470 63 61 73 65 20 4f 50 5f 4d 6f 76 65 47 74 3a 20  case OP_MoveGt: 
17480 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
17490 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in3 */.  int i 
174a0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
174b0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
174c0 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
174d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
174e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
174f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
17500 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  );.  if( pC->pCu
17510 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69  rsor!=0 ){.    i
17520 6e 74 20 72 65 73 2c 20 6f 63 3b 0a 20 20 20 20  nt res, oc;.    
17530 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
17540 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
17550 77 20 3d 20 30 3b 0a 20 20 20 20 2a 70 43 2d 3e  w = 0;.    *pC->
17560 70 49 6e 63 72 4b 65 79 20 3d 20 6f 63 3d 3d 4f  pIncrKey = oc==O
17570 50 5f 4d 6f 76 65 47 74 20 7c 7c 20 6f 63 3d 3d  P_MoveGt || oc==
17580 4f 50 5f 4d 6f 76 65 4c 65 3b 0a 20 20 20 20 69  OP_MoveLe;.    i
17590 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
175a0 7b 0a 20 20 20 20 20 20 69 36 34 20 69 4b 65 79  {.      i64 iKey
175b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
175c0 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20  tValue(pIn3);.  
175d0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
175e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
175f0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
17600 65 3d 3d 4f 50 5f 4d 6f 76 65 47 65 20 29 3b 0a  e==OP_MoveGe );.
17610 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65          pC->move
17620 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
17630 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
17640 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
17650 20 20 20 20 20 20 20 70 43 2d 3e 64 65 66 65 72         pC->defer
17660 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
17670 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
17680 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
17690 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
176a0 65 74 6f 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  eto(pC->pCursor,
176b0 20 30 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79   0, 0, (u64)iKey
176c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
176d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
176e0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
176f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17700 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
17710 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
17720 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
17730 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
17740 69 64 20 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20  id = res==0;.   
17750 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 55 6e   }else{.      Un
17760 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
17770 20 20 20 20 20 20 69 6e 74 20 6e 46 69 65 6c 64        int nField
17780 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
17790 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
177a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
177b0 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
177c0 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
177d0 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20       r.pKeyInfo 
177e0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
177f0 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d        r.nField =
17800 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 72   nField;.      r
17810 2e 6e 65 65 64 46 72 65 65 20 3d 20 30 3b 0a 20  .needFree = 0;. 
17820 20 20 20 20 20 72 2e 6e 65 65 64 44 65 73 74 72       r.needDestr
17830 6f 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 2e  oy = 0;.      r.
17840 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  aMem = &p->aMem[
17850 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
17860 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17870 65 4d 6f 76 65 74 6f 28 70 43 2d 3e 70 43 75 72  eMoveto(pC->pCur
17880 73 6f 72 2c 20 30 2c 20 26 72 2c 20 30 2c 20 30  sor, 0, &r, 0, 0
17890 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
178a0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
178b0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
178c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
178d0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
178e0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
178f0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  lid = 0;.    }. 
17900 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
17910 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
17920 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
17930 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
17940 20 20 2a 70 43 2d 3e 70 49 6e 63 72 4b 65 79 20    *pC->pIncrKey 
17950 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
17960 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
17970 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
17980 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  ++;.#endif.    i
17990 66 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 65  f( oc==OP_MoveGe
179a0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47   || oc==OP_MoveG
179b0 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  t ){.      if( r
179c0 65 73 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  es<0 ){.        
179d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
179e0 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
179f0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
17a00 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17a10 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
17a20 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17a30 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
17a40 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
17a50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17a60 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
17a70 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
17a80 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
17a90 4f 50 5f 4d 6f 76 65 4c 74 20 7c 7c 20 6f 63 3d  OP_MoveLt || oc=
17aa0 3d 4f 50 5f 4d 6f 76 65 4c 65 20 29 3b 0a 20 20  =OP_MoveLe );.  
17ab0 20 20 20 20 69 66 28 20 72 65 73 3e 3d 30 20 29      if( res>=0 )
17ac0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
17ad0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
17ae0 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ous(pC->pCursor,
17af0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
17b00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17b10 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17b20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
17b30 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
17b40 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
17b50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17b60 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
17b70 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
17b80 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
17b90 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
17ba0 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66         ** see if
17bb0 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
17bc0 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
17bd0 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
17be0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
17bf0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
17c00 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
17c10 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
17c20 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
17c30 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
17c40 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
17c50 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70  }else if( !pC->p
17c60 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
17c70 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
17c80 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
17c90 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
17ca0 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
17cb0 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
17cc0 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
17cd0 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
17ce0 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
17cf0 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
17d00 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
17d10 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
17d20 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
17d30 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
17d40 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
17d50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17d60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
17d70 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
17d80 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
17d90 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
17da0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
17db0 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 20  eRecord.  P1 is 
17dc0 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  an index..** If 
17dd0 61 6e 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61  an entry that ma
17de0 74 63 68 65 73 20 74 68 65 20 76 61 6c 75 65 20  tches the value 
17df0 69 6e 20 72 65 67 69 73 74 65 72 20 70 33 20 65  in register p3 e
17e00 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 65 6e  xists in P1 then
17e10 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  .** jump to P2. 
17e20 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
17e30 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
17e40 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 0a  any entry in P1.
17e50 2a 2a 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ** then fall thr
17e60 75 2e 20 20 54 68 65 20 50 31 20 63 75 72 73 6f  u.  The P1 curso
17e70 72 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  r is left pointi
17e80 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
17e90 6e 67 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69  ng entry.** if i
17ea0 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20  t exists..**.** 
17eb0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
17ec0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
17ed0 65 6d 65 6e 74 20 74 68 65 20 49 4e 20 6f 70 65  ement the IN ope
17ee0 72 61 74 6f 72 20 77 68 65 72 65 20 74 68 65 0a  rator where the.
17ef0 2a 2a 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  ** left-hand sid
17f00 65 20 69 73 20 61 20 53 45 4c 45 43 54 20 73 74  e is a SELECT st
17f10 61 74 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79  atement.  P1 may
17f20 20 62 65 20 61 20 74 72 75 65 20 69 6e 64 65 78   be a true index
17f30 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62  , or it.** may b
17f40 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  e a temporary in
17f50 64 65 78 20 74 68 61 74 20 68 6f 6c 64 73 20 74  dex that holds t
17f60 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
17f70 65 20 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74  e SELECT.** stat
17f80 65 6d 65 6e 74 2e 20 20 20 54 68 69 73 20 69 6e  ement.   This in
17f90 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 6c 73  struction is als
17fa0 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  o used to implem
17fb0 65 6e 74 20 74 68 65 0a 2a 2a 20 44 49 53 54 49  ent the.** DISTI
17fc0 4e 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 53  NCT keyword in S
17fd0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
17fe0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
17ff0 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20  truction checks 
18000 69 66 20 69 6e 64 65 78 20 50 31 20 63 6f 6e 74  if index P1 cont
18010 61 69 6e 73 20 61 20 72 65 63 6f 72 64 20 66 6f  ains a record fo
18020 72 20 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20  r which .** the 
18030 66 69 72 73 74 20 4e 20 73 65 72 69 61 6c 69 7a  first N serializ
18040 65 64 20 76 61 6c 75 65 73 20 65 78 61 63 74 6c  ed values exactl
18050 79 20 6d 61 74 63 68 20 74 68 65 20 4e 20 73 65  y match the N se
18060 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a  rialized values.
18070 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ** in the record
18080 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2c   in register P3,
18090 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
180a0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
180b0 76 61 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65  values in.** the
180c0 20 50 33 20 72 65 63 6f 72 64 20 28 74 68 65 20   P3 record (the 
180d0 50 33 20 72 65 63 6f 72 64 20 69 73 20 61 20 70  P3 record is a p
180e0 72 65 66 69 78 20 6f 66 20 74 68 65 20 50 31 20  refix of the P1 
180f0 72 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20  record). .**.** 
18100 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
18110 6e 64 2c 20 4d 6f 76 65 54 6f 2c 20 49 73 55 6e  nd, MoveTo, IsUn
18120 69 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ique, NotExists.
18130 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
18140 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
18150 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  * *.**.** Regist
18160 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
18170 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
18180 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50  y MakeRecord.  P
18190 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  1 is.** an index
181a0 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65  .  If no entry e
181b0 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 61 74  xists in P1 that
181c0 20 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f   matches the blo
181d0 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  b then jump.** t
181e0 6f 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74  o P2.  If an ent
181f0 72 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67  ry does existing
18200 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20  , fall through. 
18210 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
18220 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  eft.** pointing 
18230 74 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  to the entry tha
18240 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a  t matches..**.**
18250 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
18260 2c 20 4d 6f 76 65 54 6f 2c 20 4e 6f 74 45 78 69  , MoveTo, NotExi
18270 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  sts, IsUnique.*/
18280 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
18290 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
182a0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
182b0 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
182c0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
182d0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
182e0 70 31 3b 0a 20 20 69 6e 74 20 61 6c 72 65 61 64  p1;.  int alread
182f0 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 43  yExists = 0;.  C
18300 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
18310 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
18320 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
18330 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
18340 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
18350 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
18360 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  )->pCursor!=0 ){
18370 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  .    int res;.  
18380 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
18390 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
183a0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
183b0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
183c0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
183d0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
183e0 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 4b 65  ){.      pC->pKe
183f0 79 49 6e 66 6f 2d 3e 70 72 65 66 69 78 49 73 45  yInfo->prefixIsE
18400 71 75 61 6c 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  qual = 1;.    }.
18410 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18420 42 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 2d 3e  BtreeMoveto(pC->
18430 70 43 75 72 73 6f 72 2c 20 70 49 6e 33 2d 3e 7a  pCursor, pIn3->z
18440 2c 20 30 2c 20 70 49 6e 33 2d 3e 6e 2c 20 30 2c  , 0, pIn3->n, 0,
18450 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
18460 70 4b 65 79 49 6e 66 6f 2d 3e 70 72 65 66 69 78  pKeyInfo->prefix
18470 49 73 45 71 75 61 6c 20 3d 20 30 3b 0a 20 20 20  IsEqual = 0;.   
18480 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18490 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61  OK ){.      brea
184a0 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72  k;.    }.    alr
184b0 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
184c0 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64  s==0);.    pC->d
184d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
184e0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
184f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
18500 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
18510 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
18520 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28  Found ){.    if(
18530 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
18540 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
18550 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
18560 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
18570 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
18580 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
18590 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
185a0 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32  : IsUnique P1 P2
185b0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
185c0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63  he P3 register c
185d0 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67  ontains an integ
185e0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
185f0 2e 20 20 43 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  .  Call this.** 
18600 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 52 2e  record number R.
18610 20 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65    The P4 registe
18620 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e  r contains an in
18630 64 65 78 20 6b 65 79 20 63 72 65 61 74 65 64 0a  dex key created.
18640 2a 2a 20 75 73 69 6e 67 20 4d 61 6b 65 49 64 78  ** using MakeIdx
18650 52 65 63 2e 20 20 43 61 6c 6c 20 69 74 20 4b 2e  Rec.  Call it K.
18660 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
18670 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61  index.  So it ha
18680 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74  s no data and it
18690 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 6f  s key consists o
186a0 66 20 61 0a 2a 2a 20 72 65 63 6f 72 64 20 67 65  f a.** record ge
186b0 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
186c0 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65 20 74  keRecord where t
186d0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69 73  he last field is
186e0 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20 6f   the .** rowid o
186f0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
18700 20 74 68 65 20 69 6e 64 65 78 20 72 65 66 65 72   the index refer
18710 73 20 74 6f 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 69  s to..** .** Thi
18720 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 73  s instruction as
18730 6b 73 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ks if there is a
18740 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20 77 68  n entry in P1 wh
18750 65 72 65 20 74 68 65 0a 2a 2a 20 66 69 65 6c 64  ere the.** field
18760 73 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20  s matches K but 
18770 74 68 65 20 72 6f 77 69 64 20 69 73 20 64 69 66  the rowid is dif
18780 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 0a 2a  ferent from R..*
18790 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
187a0 20 73 75 63 68 20 65 6e 74 72 79 2c 20 74 68 65   such entry, the
187b0 6e 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6d  n there is an im
187c0 6d 65 64 69 61 74 65 0a 2a 2a 20 6a 75 6d 70 20  mediate.** jump 
187d0 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 79 20 65  to P2.  If any e
187e0 6e 74 72 79 20 64 6f 65 73 20 65 78 69 73 74 20  ntry does exist 
187f0 77 68 65 72 65 20 74 68 65 20 69 6e 64 65 78 20  where the index 
18800 73 74 72 69 6e 67 0a 2a 2a 20 6d 61 74 63 68 65  string.** matche
18810 73 20 4b 20 62 75 74 20 74 68 65 20 72 65 63 6f  s K but the reco
18820 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
18830 20 52 2c 20 74 68 65 6e 20 74 68 65 20 72 65 63   R, then the rec
18840 6f 72 64 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ord.** number fo
18850 72 20 74 68 61 74 20 65 6e 74 72 79 20 69 73 20  r that entry is 
18860 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 50 33 20  written into P3 
18870 61 6e 64 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  and control.** f
18880 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
18890 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
188a0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
188b0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
188c0 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e 64  NotExists, Found
188d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e  .*/.case OP_IsUn
188e0 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20 2f  ique: {        /
188f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
18900 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
18910 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b  ;.  Cursor *pCx;
18920 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
18930 73 72 3b 0a 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20  sr;.  Mem *pK;. 
18940 20 69 36 34 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f   i64 R;..  /* Po
18950 70 20 74 68 65 20 76 61 6c 75 65 20 52 20 6f 66  p the value R of
18960 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  f the top of the
18970 20 73 74 61 63 6b 0a 20 20 2a 2f 0a 20 20 61 73   stack.  */.  as
18980 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
18990 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
189a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
189b0 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e  .i>0 && pOp->p4.
189c0 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  i<=p->nMem );.  
189d0 70 4b 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  pK = &p->aMem[pO
189e0 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 73 71 6c 69  p->p4.i];.  sqli
189f0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
18a00 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 52 20  rify(pIn3);.  R 
18a10 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61  = pIn3->u.i;.  a
18a20 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
18a30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
18a40 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b   pCx = p->apCsr[
18a50 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
18a60 78 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  x!=0 );.  pCrsr 
18a70 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
18a80 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
18a90 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
18aa0 20 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20     i64 v;       
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 6f 6e 20 74 68 65 20 50 31  number on the P1
18ad0 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
18ae0 68 65 73 20 4b 20 2a 2f 0a 20 20 20 20 63 68 61  hes K */.    cha
18af0 72 20 2a 7a 4b 65 79 3b 20 20 20 20 2f 2a 20 54  r *zKey;    /* T
18b00 68 65 20 76 61 6c 75 65 20 6f 66 20 4b 20 2a 2f  he value of K */
18b10 0a 20 20 20 20 69 6e 74 20 6e 4b 65 79 3b 20 20  .    int nKey;  
18b20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18b30 20 62 79 74 65 73 20 69 6e 20 4b 20 2a 2f 0a 20   bytes in K */. 
18b40 20 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20     int len;     
18b50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
18b60 79 74 65 73 20 69 6e 20 4b 20 77 69 74 68 6f 75  ytes in K withou
18b70 74 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  t the rowid at t
18b80 68 65 20 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e  he end */.    in
18b90 74 20 73 7a 52 6f 77 69 64 3b 20 20 20 2f 2a 20  t szRowid;   /* 
18ba0 53 69 7a 65 20 6f 66 20 74 68 65 20 72 6f 77 69  Size of the rowi
18bb0 64 20 63 6f 6c 75 6d 6e 20 61 74 20 74 68 65 20  d column at the 
18bc0 65 6e 64 20 6f 66 20 7a 4b 65 79 20 2a 2f 0a 0a  end of zKey */..
18bd0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
18be0 20 4b 20 69 73 20 61 20 73 74 72 69 6e 67 20 61   K is a string a
18bf0 6e 64 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69  nd make zKey poi
18c00 6e 74 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20  nt to K.    */. 
18c10 20 20 20 61 73 73 65 72 74 28 20 70 4b 2d 3e 66     assert( pK->f
18c20 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
18c30 29 3b 0a 20 20 20 20 7a 4b 65 79 20 3d 20 70 4b  );.    zKey = pK
18c40 2d 3e 7a 3b 0a 20 20 20 20 6e 4b 65 79 20 3d 20  ->z;.    nKey = 
18c50 70 4b 2d 3e 6e 3b 0a 0a 20 20 20 20 2f 2a 20 73  pK->n;..    /* s
18c60 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
18c70 69 64 4c 65 6e 28 29 20 6f 6e 6c 79 20 72 65 74  idLen() only ret
18c80 75 72 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20  urns other than 
18c90 53 51 4c 49 54 45 5f 4f 4b 20 77 68 65 6e 20 74  SQLITE_OK when t
18ca0 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  he.    ** record
18cb0 20 70 61 73 73 65 64 20 61 73 20 61 6e 20 61 72   passed as an ar
18cc0 67 75 6d 65 6e 74 20 63 6f 72 72 75 70 74 2e 20  gument corrupt. 
18cd0 53 69 6e 63 65 20 74 68 65 20 72 65 63 6f 72 64  Since the record
18ce0 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20   in this case.  
18cf0 20 20 2a 2a 20 68 61 73 20 6a 75 73 74 20 62 65    ** has just be
18d00 65 6e 20 63 72 65 61 74 65 64 20 62 79 20 61 6e  en created by an
18d10 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 69   OP_MakeRecord i
18d20 6e 73 74 72 75 63 74 69 6f 6e 2c 20 61 6e 64 20  nstruction, and 
18d30 6e 6f 74 20 6c 6f 61 64 65 64 0a 20 20 20 20 2a  not loaded.    *
18d40 2a 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  * from the datab
18d50 61 73 65 20 66 69 6c 65 2c 20 69 74 20 69 73 20  ase file, it is 
18d60 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
18d70 20 69 74 20 74 6f 20 62 65 20 63 6f 72 72 75 70   it to be corrup
18d80 74 2e 0a 20 20 20 20 2a 2a 20 54 68 65 72 65 66  t..    ** Theref
18d90 6f 72 65 2c 20 61 73 73 65 72 74 28 72 63 3d 3d  ore, assert(rc==
18da0 53 51 4c 49 54 45 5f 4f 4b 29 2e 0a 20 20 20 20  SQLITE_OK)..    
18db0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
18dc0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 4c  te3VdbeIdxRowidL
18dd0 65 6e 28 28 75 38 2a 29 7a 4b 65 79 2c 20 6e 4b  en((u8*)zKey, nK
18de0 65 79 2c 20 26 73 7a 52 6f 77 69 64 29 3b 0a 20  ey, &szRowid);. 
18df0 20 20 20 61 73 73 65 72 74 28 72 63 3d 3d 53 51     assert(rc==SQ
18e00 4c 49 54 45 5f 4f 4b 29 3b 0a 20 20 20 20 6c 65  LITE_OK);.    le
18e10 6e 20 3d 20 6e 4b 65 79 2d 73 7a 52 6f 77 69 64  n = nKey-szRowid
18e20 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
18e30 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69 6e   for an entry in
18e40 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75   P1 where all bu
18e50 74 20 74 68 65 20 6c 61 73 74 20 66 6f 75 72 20  t the last four 
18e60 62 79 74 65 73 20 6d 61 74 63 68 20 4b 2e 0a 20  bytes match K.. 
18e70 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 69     ** If there i
18e80 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c  s no such entry,
18e90 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
18ea0 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a  y to P2..    */.
18eb0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 78 2d      assert( pCx-
18ec0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
18ed0 3d 30 20 29 3b 0a 20 20 20 20 70 43 78 2d 3e 63  =0 );.    pCx->c
18ee0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
18ef0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 72 63  HE_STALE;.    rc
18f00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
18f10 6f 76 65 74 6f 28 70 43 72 73 72 2c 20 7a 4b 65  oveto(pCrsr, zKe
18f20 79 2c 20 30 2c 20 6c 65 6e 2c 20 30 2c 20 26 72  y, 0, len, 0, &r
18f30 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
18f40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18f50 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18f60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18f70 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30   }.    if( res<0
18f80 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
18f90 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
18fa0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
18fb0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
18fc0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
18fd0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
18fe0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
18ff0 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
19000 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
19010 43 6f 6d 70 61 72 65 28 70 43 78 2c 20 30 2c 20  Compare(pCx, 0, 
19020 6c 65 6e 2c 20 28 75 38 2a 29 7a 4b 65 79 2c 20  len, (u8*)zKey, 
19030 26 72 65 73 29 3b 20 0a 20 20 20 20 69 66 28 20  &res); .    if( 
19040 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
19050 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19060 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
19070 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20   res>0 ){.      
19080 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
19090 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
190a0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 74 20     }..    /* At 
190b0 74 68 69 73 20 70 6f 69 6e 74 2c 20 70 43 72 73  this point, pCrs
190c0 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
190d0 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20   an entry in P1 
190e0 77 68 65 72 65 20 61 6c 6c 20 62 75 74 0a 20 20  where all but.  
190f0 20 20 2a 2a 20 74 68 65 20 66 69 6e 61 6c 20 65    ** the final e
19100 6e 74 72 79 20 28 74 68 65 20 72 6f 77 69 64 29  ntry (the rowid)
19110 20 6d 61 74 63 68 65 73 20 4b 2e 20 20 43 68 65   matches K.  Che
19120 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
19130 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c 20 72 6f  .    ** final ro
19140 77 69 64 20 63 6f 6c 75 6d 6e 20 69 73 20 64 69  wid column is di
19150 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20  fferent from R. 
19160 20 49 66 20 69 74 20 65 71 75 61 6c 73 20 52 20   If it equals R 
19170 74 68 65 6e 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  then jump.    **
19180 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
19190 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72  P2..    */.    r
191a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
191b0 64 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26  dxRowid(pCrsr, &
191c0 76 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  v);.    if( rc!=
191d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
191e0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
191f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19200 7d 0a 20 20 20 20 69 66 28 20 76 3d 3d 52 20 29  }.    if( v==R )
19210 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
19220 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
19230 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
19240 20 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c 20 76    /* The final v
19250 61 72 69 6e 74 20 6f 66 20 74 68 65 20 6b 65 79  arint of the key
19260 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
19270 6f 6d 20 52 2e 20 20 53 74 6f 72 65 20 69 74 20  om R.  Store it 
19280 62 61 63 6b 0a 20 20 20 20 2a 2a 20 69 6e 74 6f  back.    ** into
19290 20 72 65 67 69 73 74 65 72 20 52 33 2e 20 20 28   register R3.  (
192a0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
192b0 72 20 6f 66 20 61 6e 20 65 6e 74 72 79 20 74 68  r of an entry th
192c0 61 74 20 76 69 6f 6c 61 74 65 73 0a 20 20 20 20  at violates.    
192d0 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
192e0 74 72 61 69 6e 74 2e 29 0a 20 20 20 20 2a 2f 0a  traint.).    */.
192f0 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20      pIn3->u.i = 
19300 76 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  v;.    assert( p
19310 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
19320 6e 74 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt );.  }.  brea
19330 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19340 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
19350 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73   P3 * *.**.** Us
19360 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19370 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
19380 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20  a integer key.  
19390 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20  If a record .** 
193a0 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f  with that key do
193b0 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
193c0 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65  table of P1, the
193d0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
193e0 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
193f0 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e  does exist, then
19400 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65   fall thru.  The
19410 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
19420 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
19430 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
19440 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54   exists..**.** T
19450 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
19460 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61  tween this opera
19470 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e  tion and NotFoun
19480 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a  d is that this.*
19490 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75  * operation assu
194a0 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61  mes the key is a
194b0 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68  n integer and th
194c0 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65  at P1 is a table
194d0 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46   whereas.** NotF
194e0 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79  ound assumes key
194f0 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74   is a blob const
19500 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65  ructed from Make
19510 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31  Record and.** P1
19520 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
19530 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19540 75 6e 64 2c 20 4d 6f 76 65 54 6f 2c 20 4e 6f 74  und, MoveTo, Not
19550 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a  Found, IsUnique.
19560 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
19570 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
19580 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
19590 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
195a0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
195b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
195c0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  r;.  assert( i>=
195d0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
195e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
195f0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
19600 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
19610 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
19620 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  ])->pCursor)!=0 
19630 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
19640 20 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20 20      u64 iKey;.  
19650 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
19660 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
19670 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
19680 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61  ->apCsr[i]->isTa
19690 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  ble );.    iKey 
196a0 3d 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d  = intToKey(pIn3-
196b0 3e 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20  >u.i);.    rc = 
196c0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
196d0 74 6f 28 70 43 72 73 72 2c 20 30 2c 20 30 2c 20  to(pCrsr, 0, 0, 
196e0 69 4b 65 79 2c 20 30 2c 26 72 65 73 29 3b 0a 20  iKey, 0,&res);. 
196f0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
19700 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
19710 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
19720 69 64 20 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20  id = res==0;.   
19730 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
19740 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
19750 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
19760 41 4c 45 3b 0a 20 20 20 20 2f 2a 20 72 65 73 20  ALE;.    /* res 
19770 6d 69 67 68 74 20 62 65 20 75 6e 69 6e 69 74 69  might be uniniti
19780 61 6c 69 7a 65 64 20 69 66 20 72 63 21 3d 53 51  alized if rc!=SQ
19790 4c 49 54 45 5f 4f 4b 2e 20 20 42 75 74 20 69 66  LITE_OK.  But if
197a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20   rc!=SQLITE_OK. 
197b0 20 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67     ** processing
197c0 20 69 73 20 61 62 6f 75 74 20 74 6f 20 61 62 6f   is about to abo
197d0 72 74 20 73 6f 20 77 65 20 72 65 61 6c 6c 79 20  rt so we really 
197e0 64 6f 20 6e 6f 74 20 63 61 72 65 20 77 68 65 74  do not care whet
197f0 68 65 72 20 6f 72 20 6e 6f 74 0a 20 20 20 20 2a  her or not.    *
19800 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * the following 
19810 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 20 20  jump is taken.  
19820 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
19830 20 64 6f 20 6e 6f 74 20 73 74 72 65 73 73 20 6f   do not stress o
19840 76 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ver.    ** the e
19850 72 72 6f 72 20 74 68 61 74 20 76 61 6c 67 72 69  rror that valgri
19860 6e 64 20 73 6f 6d 65 74 69 6d 65 73 20 73 68 6f  nd sometimes sho
19870 77 73 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 73  ws on the next s
19880 74 61 74 65 6d 65 6e 74 20 77 68 65 6e 0a 20 20  tatement when.  
19890 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 69 6f 65    ** running ioe
198a0 72 72 2e 74 65 73 74 20 61 6e 64 20 73 69 6d 69  rr.test and simi
198b0 6c 61 72 20 66 61 69 6c 75 72 65 2d 72 65 63 6f  lar failure-reco
198c0 76 65 72 79 20 74 65 73 74 20 73 63 72 69 70 74  very test script
198d0 73 2e 29 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  s.) */.    if( r
198e0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
198f0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
19900 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
19910 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
19920 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  =0 );.    }.  }e
19930 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65  lse if( !pC->pse
19940 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
19950 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
19960 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20  when an attempt 
19970 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63  to open a read c
19980 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20  ursor on the .  
19990 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
199a0 65 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73  er table returns
199b0 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20   SQLITE_EMPTY.. 
199c0 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
199d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
199e0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
199f0 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
19a00 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
19a10 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  lid==0 );.  }.  
19a20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19a30 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
19a40 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19a50 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
19a60 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
19a70 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
19a80 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
19a90 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
19aa0 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
19ab0 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
19ac0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
19ad0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
19ae0 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
19af0 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
19b00 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
19b10 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
19b20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
19b30 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
19b40 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19b50 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
19b60 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
19b70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
19b80 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
19b90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
19ba0 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43 6f 75  apCsr[i]->seqCou
19bb0 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79  nt++;.  MemSetTy
19bc0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
19bd0 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
19be0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
19bf0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
19c00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
19c10 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
19c20 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
19c30 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
19c40 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
19c50 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
19c60 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
19c70 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
19c80 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
19c90 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
19ca0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
19cb0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
19cc0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
19cd0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
19ce0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
19cf0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
19d00 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
19d10 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
19d20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c  that holds the l
19d30 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
19d40 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  y.** generated r
19d50 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e  ecord number.  N
19d60 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
19d70 62 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  bers are allowed
19d80 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74   to be less.** t
19d90 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
19da0 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
19db0 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
19dc0 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46  imum, a SQLITE_F
19dd0 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  ULL.** error is 
19de0 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20  generated.  The 
19df0 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
19e00 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
19e10 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63  generated.** rec
19e20 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ord number.  Thi
19e30 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
19e40 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
19e50 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
19e60 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
19e70 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
19e80 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
19e90 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
19ea0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
19eb0 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19ec0 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20  .  i64 v = 0;.  
19ed0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
19ee0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
19ef0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
19f00 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
19f10 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
19f20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
19f30 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 20 29  ])->pCursor==0 )
19f40 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
19f50 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
19f60 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
19f70 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
19f80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
19f90 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
19fa0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
19fb0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
19fc0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
19fd0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
19fe0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
19ff0 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1a000 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1a010 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1a020 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1a030 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1a040 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1a050 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1a060 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1a070 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1a080 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1a090 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1a0a0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1a0b0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1a0c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1a0d0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1a0e0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1a0f0 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1a100 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1a110 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1a120 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1a130 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1a140 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1a150 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1a160 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1a170 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1a180 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1a190 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1a1a0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1a1b0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1a1c0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1a1d0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1a1e0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1a1f0 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2a 0a  0 times..    **.
1a200 20 20 20 20 2a 2a 20 46 6f 72 20 61 20 74 61 62      ** For a tab
1a210 6c 65 20 77 69 74 68 20 6c 65 73 73 20 74 68 61  le with less tha
1a220 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65 6e 74 72  n 2 billion entr
1a230 69 65 73 2c 20 74 68 65 20 70 72 6f 62 61 62 69  ies, the probabi
1a240 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 6e  lity.    ** of n
1a250 6f 74 20 66 69 6e 64 69 6e 67 20 61 20 75 6e 75  ot finding a unu
1a260 73 65 64 20 72 6f 77 69 64 20 69 73 20 61 62 6f  sed rowid is abo
1a270 75 74 20 31 2e 30 65 2d 33 30 30 2e 20 20 54 68  ut 1.0e-300.  Th
1a280 69 73 20 69 73 20 61 20 0a 20 20 20 20 2a 2a 20  is is a .    ** 
1a290 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62 61 62 69  non-zero probabi
1a2a0 6c 69 74 79 2c 20 62 75 74 20 69 74 20 69 73 20  lity, but it is 
1a2b0 73 74 69 6c 6c 20 76 61 6e 69 73 68 69 6e 67 6c  still vanishingl
1a2c0 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73 68 6f 75  y small and shou
1a2d0 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76 65 72 20  ld.    ** never 
1a2e0 63 61 75 73 65 20 61 20 70 72 6f 62 6c 65 6d 2e  cause a problem.
1a2f0 20 20 59 6f 75 20 61 72 65 20 6d 75 63 68 2c 20    You are much, 
1a300 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b 65 6c 79  much more likely
1a310 20 74 6f 20 68 61 76 65 20 61 0a 20 20 20 20 2a   to have a.    *
1a320 2a 20 68 61 72 64 77 61 72 65 20 66 61 69 6c 75  * hardware failu
1a330 72 65 20 74 68 61 6e 20 66 6f 72 20 74 68 69 73  re than for this
1a340 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 61   algorithm to fa
1a350 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  il..    **.    *
1a360 2a 20 54 68 65 20 61 6e 61 6c 79 73 69 73 20 69  * The analysis i
1a370 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
1a380 61 72 61 67 72 61 70 68 20 61 73 73 75 6d 65 73  aragraph assumes
1a390 20 74 68 61 74 20 79 6f 75 20 68 61 76 65 20 61   that you have a
1a3a0 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20 73 6f 75   good.    ** sou
1a3b0 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d 20 6e 75  rce of random nu
1a3c0 6d 62 65 72 73 2e 20 20 49 73 20 61 20 6c 69 62  mbers.  Is a lib
1a3d0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 20 6c 69  rary function li
1a3e0 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a 20 20 20  ke lrand48().   
1a3f0 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75 67 68 3f   ** good enough?
1a400 20 20 4d 61 79 62 65 2e 20 4d 61 79 62 65 20 6e    Maybe. Maybe n
1a410 6f 74 2e 20 49 74 27 73 20 68 61 72 64 20 74 6f  ot. It's hard to
1a420 20 6b 6e 6f 77 20 77 68 65 74 68 65 72 20 74 68   know whether th
1a430 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74  ere.    ** might
1a440 20 62 65 20 73 75 62 74 6c 65 20 62 75 67 73 20   be subtle bugs 
1a450 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65 6d 65 6e  is some implemen
1a460 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72 61 6e 64  tations of lrand
1a470 34 38 28 29 20 74 68 61 74 0a 20 20 20 20 2a 2a  48() that.    **
1a480 20 63 6f 75 6c 64 20 63 61 75 73 65 20 70 72 6f   could cause pro
1a490 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f 69 64 20  blems. To avoid 
1a4a0 75 6e 63 65 72 74 61 69 6e 74 79 2c 20 53 51 4c  uncertainty, SQL
1a4b0 69 74 65 20 75 73 65 73 20 69 74 73 20 6f 77 6e  ite uses its own
1a4c0 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64 6f 6d 20   .    ** random 
1a4d0 6e 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72  number generator
1a4e0 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 52 43   based on the RC
1a4f0 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  4 algorithm..   
1a500 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f 20 70 72   **.    ** To pr
1a510 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74 79 20 6f  omote locality o
1a520 66 20 72 65 66 65 72 65 6e 63 65 20 66 6f 72 20  f reference for 
1a530 72 65 70 65 74 69 74 69 76 65 20 69 6e 73 65 72  repetitive inser
1a540 74 73 2c 20 74 68 65 0a 20 20 20 20 2a 2a 20 66  ts, the.    ** f
1a550 69 72 73 74 20 66 65 77 20 61 74 74 65 6d 70 74  irst few attempt
1a560 73 20 61 74 20 63 68 6f 6f 73 69 6e 67 20 61 20  s at choosing a 
1a570 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 70 69 63  random rowid pic
1a580 6b 20 76 61 6c 75 65 73 20 6a 75 73 74 20 61 20  k values just a 
1a590 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a 20 6c 61  little.    ** la
1a5a0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 70 72  rger than the pr
1a5b0 65 76 69 6f 75 73 20 72 6f 77 69 64 2e 20 20 54  evious rowid.  T
1a5c0 68 69 73 20 68 61 73 20 62 65 65 6e 20 73 68 6f  his has been sho
1a5d0 77 6e 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 6c  wn experimentall
1a5e0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64 6f 75 62  y.    ** to doub
1a5f0 6c 65 20 74 68 65 20 73 70 65 65 64 20 6f 66 20  le the speed of 
1a600 74 68 65 20 43 4f 50 59 20 6f 70 65 72 61 74 69  the COPY operati
1a610 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  on..    */.    i
1a620 6e 74 20 72 65 73 2c 20 72 78 3d 53 51 4c 49 54  nt res, rx=SQLIT
1a630 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20 20 20 69  E_OK, cnt;.    i
1a640 36 34 20 78 3b 0a 20 20 20 20 63 6e 74 20 3d 20  64 x;.    cnt = 
1a650 30 3b 0a 20 20 20 20 69 66 28 20 28 73 71 6c 69  0;.    if( (sqli
1a660 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
1a670 2d 3e 70 43 75 72 73 6f 72 29 26 28 42 54 52 45  ->pCursor)&(BTRE
1a680 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45 45 5f 5a  E_INTKEY|BTREE_Z
1a690 45 52 4f 44 41 54 41 29 29 20 21 3d 0a 20 20 20  ERODATA)) !=.   
1a6a0 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 54         BTREE_INT
1a6b0 4b 45 59 20 29 7b 0a 20 20 20 20 20 20 72 63 20  KEY ){.      rc 
1a6c0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
1a6d0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
1a6e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a6f0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1a700 61 73 73 65 72 74 28 20 28 73 71 6c 69 74 65 33  assert( (sqlite3
1a710 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70  BtreeFlags(pC->p
1a720 43 75 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f  Cursor) & BTREE_
1a730 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b 0a 20 20  INTKEY)!=0 );.  
1a740 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69 74    assert( (sqlit
1a750 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d  e3BtreeFlags(pC-
1a760 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52 45  >pCursor) & BTRE
1a770 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d 30 20 29  E_ZERODATA)==0 )
1a780 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1a790 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1a7a0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1a7b0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1a7c0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1a7d0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1a7e0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1a7f0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1a800 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1a810 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1a820 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1a830 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1a840 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1a850 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1a860 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1a870 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1a880 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1a890 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1a8a0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1a8b0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1a8c0 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
1a8d0 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
1a8e0 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
1a8f0 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
1a900 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1a910 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43   ){.      if( pC
1a920 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64  ->nextRowidValid
1a930 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
1a940 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 3b 0a 20  pC->nextRowid;. 
1a950 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a960 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a970 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1a980 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1a990 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1a9a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1a9b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a9c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a9d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a9e0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1a9f0 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20       v = 1;.    
1aa00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1aa10 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1aa20 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1aa30 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1aa40 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e       v = keyToIn
1aa50 74 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  t(v);.          
1aa60 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44  if( v==MAX_ROWID
1aa70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1aa80 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1aa90 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1aaa0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1aab0 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20       v++;.      
1aac0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1aad0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1aae0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1aaf0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1ab00 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1ab10 20 20 20 20 20 20 20 20 4d 65 6d 20 2a 70 4d 65          Mem *pMe
1ab20 6d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  m;.        asser
1ab30 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
1ab40 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
1ab50 20 29 3b 20 2f 2a 20 50 33 20 69 73 20 61 20 76   ); /* P3 is a v
1ab60 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1ab70 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   */.        pMem
1ab80 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1ab90 3e 70 33 5d 3b 0a 09 52 45 47 49 53 54 45 52 5f  >p3];..REGISTER_
1aba0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1abb0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1abc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1abd0 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1abe0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1abf0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1ac00 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1ac10 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1ac20 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1ac30 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1ac40 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1ac50 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1ac60 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1ac70 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1ac80 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1ac90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1aca0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1acb0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1acc0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1acd0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1ace0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1acf0 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1ad00 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1ad10 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1ad20 69 66 28 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20  if( v<MAX_ROWID 
1ad30 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e  ){.        pC->n
1ad40 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20  extRowidValid = 
1ad50 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e  1;.        pC->n
1ad60 65 78 74 52 6f 77 69 64 20 3d 20 76 2b 31 3b 0a  extRowid = v+1;.
1ad70 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1ad80 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
1ad90 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  idValid = 0;.   
1ada0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
1adb0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
1adc0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 61  Rowid ){.      a
1add0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1ade0 30 20 29 3b 20 20 2f 2a 20 53 51 4c 49 54 45 5f  0 );  /* SQLITE_
1adf0 46 55 4c 4c 20 6d 75 73 74 20 68 61 76 65 20 6f  FULL must have o
1ae00 63 63 75 72 72 65 64 20 70 72 69 6f 72 20 74 6f  ccurred prior to
1ae10 20 74 68 69 73 20 2a 2f 0a 20 20 20 20 20 20 76   this */.      v
1ae20 20 3d 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52   = db->priorNewR
1ae30 6f 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20  owid;.      cnt 
1ae40 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
1ae50 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d         if( cnt==
1ae60 30 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66  0 && (v&0xffffff
1ae70 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20  )==v ){.        
1ae80 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d    v++;.        }
1ae90 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1aea0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
1aeb0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
1aec0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1aed0 20 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78   cnt<5 ) v &= 0x
1aee0 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20  ffffff;.        
1aef0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3d  }.        if( v=
1af00 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
1af10 20 20 20 20 20 20 20 78 20 3d 20 69 6e 74 54 6f         x = intTo
1af20 4b 65 79 28 76 29 3b 0a 20 20 20 20 20 20 20 20  Key(v);.        
1af30 72 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rx = sqlite3Btre
1af40 65 4d 6f 76 65 74 6f 28 70 43 2d 3e 70 43 75 72  eMoveto(pC->pCur
1af50 73 6f 72 2c 20 30 2c 20 30 2c 20 28 75 36 34 29  sor, 0, 0, (u64)
1af60 78 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  x, 0, &res);.   
1af70 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
1af80 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30    }while( cnt<10
1af90 30 20 26 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f  0 && rx==SQLITE_
1afa0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a  OK && res==0 );.
1afb0 20 20 20 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e        db->priorN
1afc0 65 77 52 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20  ewRowid = v;.   
1afd0 20 20 20 69 66 28 20 72 78 3d 3d 53 51 4c 49 54     if( rx==SQLIT
1afe0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1aff0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1b000 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20  QLITE_FULL;.    
1b010 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b030 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
1b040 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b050 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1b060 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1b070 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1b080 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1b090 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  LE;.  }.  MemSet
1b0a0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1b0b0 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d  EM_Int);.  pOut-
1b0c0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
1b0d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b0e0 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
1b0f0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69   P4 P5.**.** Wri
1b100 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
1b110 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
1b120 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
1b130 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
1b140 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
1b150 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
1b160 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
1b170 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
1b180 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
1b190 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
1b1a0 73 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  s the value stor
1b1b0 65 64 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  ed register.** n
1b1c0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
1b1d0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
1b1e0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
1b1f0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
1b200 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
1b210 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1b220 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1b230 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
1b240 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1b250 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1b260 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1b270 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
1b280 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1b290 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1b2a0 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
1b2b0 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
1b2c0 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
1b2d0 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
1b2e0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
1b2f0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
1b300 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
1b310 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
1b320 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
1b330 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
1b340 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
1b350 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
1b360 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
1b370 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
1b380 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
1b390 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
1b3a0 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
1b3b0 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
1b3c0 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
1b3d0 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
1b3e0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
1b3f0 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
1b400 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
1b410 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
1b420 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
1b430 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
1b440 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
1b450 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
1b460 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
1b470 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
1b480 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
1b490 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
1b4a0 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
1b4b0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
1b4c0 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
1b4d0 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
1b4e0 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
1b4f0 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
1b500 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
1b510 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1b520 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
1b530 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
1b540 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
1b550 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
1b560 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
1b570 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  xInsert..*/.case
1b580 20 4f 50 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20   OP_Insert: {.  
1b590 4d 65 6d 20 2a 70 44 61 74 61 20 3d 20 26 70 2d  Mem *pData = &p-
1b5a0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1b5b0 20 20 4d 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70    Mem *pKey = &p
1b5c0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
1b5d0 0a 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ..  i64 iKey;   
1b5e0 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
1b5f0 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
1b600 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
1b610 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 69   inserted */.  i
1b620 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1b630 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1b640 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1b650 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1b660 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1b670 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1b680 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1b690 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1b6a0 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  || pC->pseudoTab
1b6b0 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1b6c0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
1b6d0 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1b6e0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1b6f0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1b700 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
1b710 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  a);.  REGISTER_T
1b720 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
1b730 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 69  ey);..  iKey = i
1b740 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75 2e  ntToKey(pKey->u.
1b750 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
1b760 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
1b770 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
1b780 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
1b790 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
1b7a0 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
1b7b0 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  wid = pKey->u.i;
1b7c0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 65 78 74 52  .  if( pC->nextR
1b7d0 6f 77 69 64 56 61 6c 69 64 20 26 26 20 70 4b 65  owidValid && pKe
1b7e0 79 2d 3e 75 2e 69 3e 3d 70 43 2d 3e 6e 65 78 74  y->u.i>=pC->next
1b7f0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 70 43 2d  Rowid ){.    pC-
1b800 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20  >nextRowidValid 
1b810 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
1b820 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
1b830 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
1b840 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
1b850 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
1b860 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
1b870 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
1b880 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
1b890 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66  Str) );.  }.  if
1b8a0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1b8b0 65 20 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43  e ){.    if( !pC
1b8c0 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62  ->ephemPseudoTab
1b8d0 6c 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  le ){.      sqli
1b8e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 43  te3DbFree(db, pC
1b8f0 2d 3e 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a  ->pData);.    }.
1b900 20 20 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69      pC->iKey = i
1b910 4b 65 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61  Key;.    pC->nDa
1b920 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20  ta = pData->n;. 
1b930 20 20 20 69 66 28 20 70 44 61 74 61 2d 3e 7a 3d     if( pData->z=
1b940 3d 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20  =pData->zMalloc 
1b950 7c 7c 20 70 43 2d 3e 65 70 68 65 6d 50 73 65 75  || pC->ephemPseu
1b960 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  doTable ){.     
1b970 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61   pC->pData = pDa
1b980 74 61 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28  ta->z;.      if(
1b990 20 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64   !pC->ephemPseud
1b9a0 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  oTable ){.      
1b9b0 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26    pData->flags &
1b9c0 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  = ~MEM_Dyn;.    
1b9d0 20 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73      pData->flags
1b9e0 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20   |= MEM_Ephem;. 
1b9f0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d         pData->zM
1ba00 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20  alloc = 0;.     
1ba10 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1ba20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20      pC->pData = 
1ba30 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70  sqlite3Malloc( p
1ba40 43 2d 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20  C->nData+2 );.  
1ba50 20 20 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61      if( !pC->pDa
1ba60 74 61 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ta ) goto no_mem
1ba70 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70  ;.      memcpy(p
1ba80 43 2d 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d  C->pData, pData-
1ba90 3e 7a 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a  >z, pC->nData);.
1baa0 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b        pC->pData[
1bab0 70 43 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a  pC->nData] = 0;.
1bac0 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b        pC->pData[
1bad0 70 43 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30  pC->nData+1] = 0
1bae0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1baf0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d  nullRow = 0;.  }
1bb00 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 6e 5a  else{.    int nZ
1bb10 65 72 6f 3b 0a 20 20 20 20 69 66 28 20 70 44 61  ero;.    if( pDa
1bb20 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1bb30 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e 5a  Zero ){.      nZ
1bb40 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 69  ero = pData->u.i
1bb50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1bb60 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
1bb70 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1bb80 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
1bb90 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1bba0 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74    pData->z, pDat
1bbd0 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20  a->n, nZero,.   
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35           pOp->p5
1bc00 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44   & OPFLAG_APPEND
1bc10 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e  );.  }.  .  pC->
1bc20 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1bc30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1bc40 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1bc50 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1bc60 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
1bc70 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
1bc80 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
1bc90 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
1bca0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1bcb0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
1bcc0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
1bcd0 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  z ){.    const c
1bce0 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61  har *zDb = db->a
1bcf0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
1bd00 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e;.    const cha
1bd10 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70  r *zTbl = pOp->p
1bd20 34 2e 7a 3b 0a 20 20 20 20 69 6e 74 20 6f 70 20  4.z;.    int op 
1bd30 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
1bd40 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
1bd50 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
1bd60 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
1bd70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1bd80 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1bd90 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1bda0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
1bdb0 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62  rg, op, zDb, zTb
1bdc0 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1bdd0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1bde0 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
1bdf0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
1be00 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34  elete P1 P2 * P4
1be10 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
1be20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
1be30 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
1be40 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
1be50 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  ointing..**.** T
1be60 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
1be70 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  e left pointing 
1be80 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  at either the ne
1be90 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
1bea0 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
1beb0 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
1bec0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1bed0 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
1bee0 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
1bef0 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
1bf00 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
1bf10 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20  a no-op.  Hence 
1bf20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65  it is OK to dele
1bf30 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66  te.** a record f
1bf40 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65  rom within an Ne
1bf50 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49  xt loop..**.** I
1bf60 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
1bf70 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
1bf80 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
1bf90 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
1bfa0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
1bfb0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
1bfc0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
1bfd0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
1bfe0 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
1bff0 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
1c000 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
1c010 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
1c020 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1c030 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
1c040 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
1c050 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
1c060 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
1c070 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
1c080 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
1c090 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
1c0a0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1c0b0 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
1c0c0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
1c0d0 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
1c0e0 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
1c0f0 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
1c100 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
1c110 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1c120 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20  Delete: {.  int 
1c130 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  i = pOp->p1;.  i
1c140 36 34 20 69 4b 65 79 3b 0a 20 20 43 75 72 73 6f  64 iKey;.  Curso
1c150 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1c160 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1c170 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1c180 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1c190 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1c1a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1c1b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
1c1c0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
1c1d0 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
1c1e0 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
1c1f0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
1c200 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate-hook will be
1c210 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b   invoked, set iK
1c220 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ey to the rowid 
1c230 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20  of the.  ** row 
1c240 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20  being deleted.. 
1c250 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55   */.  if( db->xU
1c260 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1c270 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1c280 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1c290 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
1c2a0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1c2b0 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73  Valid );  /* las
1c2c0 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72  tRowid set by pr
1c2d0 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75  evious OP_NotFou
1c2e0 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d  nd */.    iKey =
1c2f0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
1c300 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69    }..  rc = sqli
1c310 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
1c320 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
1c330 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1c340 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72  ue_to_error;.  r
1c350 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c360 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73  Delete(pC->pCurs
1c370 6f 72 29 3b 0a 20 20 70 43 2d 3e 6e 65 78 74 52  or);.  pC->nextR
1c380 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20  owidValid = 0;. 
1c390 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1c3a0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1c3b0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
1c3c0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
1c3d0 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
1c3e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1c3f0 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
1c400 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
1c410 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73  p4.z ){.    cons
1c420 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62  t char *zDb = db
1c430 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
1c440 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20  Name;.    const 
1c450 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70  char *zTbl = pOp
1c460 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e  ->p4.z;.    db->
1c470 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
1c480 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
1c490 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
1c4a0 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
1c4b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c4c0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
1c4d0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
1c4e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
1c4f0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
1c500 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c510 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
1c520 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  P1 * *.**.** Thi
1c530 73 20 6f 70 63 6f 64 65 20 72 65 73 65 74 73 20  s opcode resets 
1c540 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
1c550 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1c560 74 6f 20 30 2e 20 49 66 20 50 31 20 69 73 20 74  to 0. If P1 is t
1c570 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  rue,.** then the
1c580 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
1c590 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
1c5a0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
1c5b0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
1c5c0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1c5d0 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
1c5e0 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
1c5f0 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
1c600 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65 20 69 74  ()).** before it
1c610 20 69 73 20 72 65 73 65 74 2e 20 54 68 69 73 20   is reset. This 
1c620 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
1c630 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
1c640 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
1c650 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  nt: {.  if( pOp-
1c660 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
1c670 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
1c680 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
1c690 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43 68 61 6e  ;.  }.  p->nChan
1c6a0 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ge = 0;.  break;
1c6b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1c6c0 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
1c6d0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
1c6e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
1c6f0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
1c700 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
1c710 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
1c720 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
1c730 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
1c740 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
1c750 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
1c760 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
1c770 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
1c780 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
1c790 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
1c7a0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
1c7b0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
1c7c0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
1c7d0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
1c7e0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
1c7f0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
1c800 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1c810 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
1c820 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
1c830 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
1c840 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
1c850 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
1c860 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1c870 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
1c880 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
1c890 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
1c8a0 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
1c8b0 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67   onto the P3 reg
1c8c0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
1c8d0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
1c8e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1c8f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
1c900 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
1c910 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
1c920 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
1c930 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
1c940 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
1c950 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
1c960 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1c970 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
1c980 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 69  P_RowData: {.  i
1c990 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1c9a0 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1c9b0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1c9c0 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75  .  u32 n;..  pOu
1c9d0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
1c9e0 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  ->p2];..  /* Not
1c9f0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
1ca00 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
1ca10 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
1ca20 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
1ca30 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 69  n */.  assert( i
1ca40 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1ca50 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1ca60 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1ca70 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1ca80 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1ca90 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20  =OP_RowKey );.  
1caa0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e  assert( pC->isIn
1cab0 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  dex || pOp->opco
1cac0 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
1cad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1cae0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1caf0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
1cb00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1cb10 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b  seudoTable==0 );
1cb20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1cb30 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
1cb40 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1cb50 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  or;.  rc = sqlit
1cb60 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1cb70 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1cb80 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1cb90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
1cba0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
1cbb0 0a 20 20 20 20 69 36 34 20 6e 36 34 3b 0a 20 20  .    i64 n64;.  
1cbc0 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
1cbd0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 73 71  sTable );.    sq
1cbe0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1cbf0 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
1cc00 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
1cc10 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
1cc20 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
1cc30 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
1cc40 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
1cc50 20 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   n64;.  }else{. 
1cc60 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44     sqlite3BtreeD
1cc70 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
1cc80 6e 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e 64 62  n);.    if( n>db
1cc90 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
1cca0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
1ccb0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
1ccc0 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
1ccd0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
1cce0 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c  MemGrow(pOut, n,
1ccf0 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
1cd00 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
1cd10 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
1cd20 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
1cd30 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
1cd40 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
1cd50 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1cd60 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
1cd70 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
1cd80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
1cd90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cda0 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
1cdb0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
1cdc0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
1cdd0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
1cde0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
1cdf0 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
1ce00 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
1ce10 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
1ce20 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
1ce30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
1ce40 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1ce50 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
1ce60 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
1ce70 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
1ce80 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
1ce90 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
1cea0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
1ceb0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2f 0a 63 61 73  point to..*/.cas
1cec0 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cee0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1cef0 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1cf00 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
1cf10 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 0a 20  *pC;.  i64 v;.. 
1cf20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1cf30 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1cf40 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1cf50 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
1cf60 43 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  C!=0 );.  rc = s
1cf70 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1cf80 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
1cf90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1cfa0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1cfb0 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
1cfc0 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 76 20  sValid ){.    v 
1cfd0 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
1cfe0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
1cff0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
1d000 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74      v = keyToInt
1d010 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 20 20 7d 65  (pC->iKey);.  }e
1d020 6c 73 65 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  lse if( pC->null
1d030 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 4c 65  Row ){.    /* Le
1d040 61 76 65 20 74 68 65 20 72 6f 77 69 64 20 73 65  ave the rowid se
1d050 74 20 74 6f 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20  t to a NULL */. 
1d060 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
1d070 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
1d080 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1d090 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1d0a0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1d0b0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 76  rsor, &v);.    v
1d0c0 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a   = keyToInt(v);.
1d0d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
1d0e0 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = v;.  MemSetTyp
1d0f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1d100 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
1d110 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
1d120 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
1d130 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
1d140 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
1d150 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
1d160 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
1d170 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
1d180 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
1d190 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
1d1a0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
1d1b0 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
1d1c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
1d1d0 52 6f 77 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  Row: {.  int i =
1d1e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
1d1f0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1d200 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1d210 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1d220 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1d230 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d240 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1d250 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
1d260 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
1d270 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d280 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
1d290 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
1d2a0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
1d2b0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
1d2c0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
1d2d0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
1d2e0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
1d2f0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
1d300 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1d310 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
1d320 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1d330 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
1d340 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
1d350 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1d360 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
1d370 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
1d380 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
1d390 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
1d3a0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
1d3b0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
1d3c0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
1d3d0 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
1d3e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
1d3f0 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1d400 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42   Cursor *pC;.  B
1d410 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1d420 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
1d430 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1d440 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d450 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1d460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d470 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
1d480 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
1d490 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
1d4a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d4b0 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
1d4c0 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
1d4d0 6c 6c 52 6f 77 20 3d 20 72 65 73 3b 0a 20 20 70  llRow = res;.  p
1d4e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1d4f0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1d500 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1d510 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65  _STALE;.  if( re
1d520 73 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29  s && pOp->p2>0 )
1d530 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1d540 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1d550 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1d560 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a  de: Sort P1 P2 *
1d570 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
1d580 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63  opcode does exac
1d590 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
1d5a0 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20  ng as OP_Rewind 
1d5b0 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69  except that.** i
1d5c0 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20  t increments an 
1d5d0 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f  undocumented glo
1d5e0 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65  bal variable use
1d5f0 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a  d for testing..*
1d600 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20  *.** Sorting is 
1d610 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
1d620 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20  writing records 
1d630 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69  into a sorting i
1d640 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  ndex,.** then re
1d650 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64  winding that ind
1d660 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69  ex and playing i
1d670 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69  t back from begi
1d680 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e  nning to.** end.
1d690 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f    We use the OP_
1d6a0 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74  Sort opcode inst
1d6b0 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64  ead of OP_Rewind
1d6c0 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65   to do the.** re
1d6d0 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20  winding so that 
1d6e0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
1d6f0 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72  ble will be incr
1d700 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72  emented and.** r
1d710 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
1d720 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68  can determine wh
1d730 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1d740 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a   optimizer is.**
1d750 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d   correctly optim
1d760 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e  izing out sorts.
1d770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1d780 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1d790 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
1d7a0 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1d7b0 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
1d7c0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
1d7d0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
1d7e0 66 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  f.  /* Fall thro
1d7f0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
1d800 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
1d810 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
1d820 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
1d830 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
1d840 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
1d850 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
1d860 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
1d870 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
1d880 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
1d890 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1d8a0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1d8b0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1d8c0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1d8d0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1d8e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1d8f0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1d900 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1d910 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1d920 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1d930 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1d940 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1d950 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1d960 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
1d970 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
1d980 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1d990 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
1d9a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1d9b0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
1d9c0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1d9d0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1d9e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d9f0 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1da00 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  pC!=0 );.  if( (
1da10 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1da20 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72  sor)!=0 ){.    r
1da30 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1da40 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
1da50 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69  s);.    pC->atFi
1da60 72 73 74 20 3d 20 72 65 73 3d 3d 30 3b 0a 20 20  rst = res==0;.  
1da70 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1da80 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1da90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1daa0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1dab0 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20  else{.    res = 
1dac0 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  1;.  }.  pC->nul
1dad0 6c 52 6f 77 20 3d 20 72 65 73 3b 0a 20 20 61 73  lRow = res;.  as
1dae0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1daf0 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
1db00 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  p );.  if( res )
1db10 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1db20 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1db30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1db40 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20  e: Next P1 P2 * 
1db50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
1db60 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
1db70 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1db80 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
1db90 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
1dba0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
1dbb0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
1dbc0 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
1dbd0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
1dbe0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
1dbf0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1dc00 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
1dc10 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
1dc20 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
1dc30 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
1dc40 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1dc50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
1dc60 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
1dc70 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1dc80 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1dc90 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1dca0 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70  o: Prev.*/./* Op
1dcb0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
1dcc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 61 63   * * *.**.** Bac
1dcd0 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
1dce0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1dcf0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
1dd00 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
1dd10 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
1dd20 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
1dd30 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
1dd40 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
1dd50 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
1dd60 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
1dd70 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
1dd80 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
1dd90 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
1dda0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
1ddb0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
1ddc0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
1ddd0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
1dde0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
1ddf0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
1de00 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
1de10 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
1de20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
1de30 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b  .case OP_Next: {
1de40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
1de50 2a 2f 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  */.  Cursor *pC;
1de60 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1de70 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
1de80 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
1de90 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28  RRUPT;.  assert(
1dea0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1deb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1dec0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ded0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1dee0 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20   if( pC==0 ){.  
1def0 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65    break;  /* See
1df00 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f   ticket #2273 */
1df10 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70  .  }.  pCrsr = p
1df20 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
1df30 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
1df40 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65   res = 1;.  asse
1df50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1df60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
1df70 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  c = pOp->opcode=
1df80 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74  =OP_Next ? sqlit
1df90 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
1dfa0 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20  r, &res) :.     
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1dfd0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1dfe0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
1dff0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65 73 3b  ->nullRow = res;
1e000 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1e010 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1e020 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
1e030 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1e040 70 32 20 2d 20 31 3b 0a 23 69 66 64 65 66 20 53  p2 - 1;.#ifdef S
1e050 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
1e060 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1e070 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
1e080 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
1e090 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
1e0a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e0b0 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
1e0c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
1e0d0 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
1e0e0 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  a SQL index key 
1e0f0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
1e100 2a 20 4d 61 6b 65 49 64 78 52 65 63 20 69 6e 73  * MakeIdxRec ins
1e110 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
1e120 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
1e130 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
1e140 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
1e150 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
1e160 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
1e170 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61  P3 is a flag tha
1e180 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e  t provides a hin
1e190 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
1e1a0 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a  layer that this.
1e1b0 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  ** insert is lik
1e1c0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
1e1d0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  end..**.** This 
1e1e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
1e1f0 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
1e200 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
1e210 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
1e220 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
1e230 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
1e240 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
1e250 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
1e260 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  2 */.  int i = p
1e270 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1e280 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1e290 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73 65 72   *pCrsr;.  asser
1e2a0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1e2b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1e2c0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d  ert( p->apCsr[i]
1e2d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1e2e0 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
1e2f0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28  EM_Blob );.  if(
1e300 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1e310 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1e320 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1e330 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1e340 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
1e350 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
1e360 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
1e370 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1e380 20 20 20 20 20 69 6e 74 20 6e 4b 65 79 20 3d 20       int nKey = 
1e390 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 63  pIn2->n;.      c
1e3a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 20  onst char *zKey 
1e3b0 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
1e3c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e3d0 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
1e3e0 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
1e3f0 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  0, 0, pOp->p3);.
1e400 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
1e410 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1e420 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
1e430 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e440 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
1e450 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
1e460 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
1e470 44 65 6c 65 74 65 4d 20 50 31 20 50 32 20 50 33  DeleteM P1 P2 P3
1e480 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63   * *.**.** The c
1e490 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
1e4a0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
1e4b0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
1e4c0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
1e4d0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
1e4e0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
1e4f0 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
1e500 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
1e510 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
1e520 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
1e530 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69  IdxDelete: {.  i
1e540 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1e550 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1e560 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e570 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e580 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
1e590 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
1e5a0 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
1e5b0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73  p->nMem );.  ass
1e5c0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1e5d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1e5e0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1e5f0 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
1e600 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d  pCrsr = (pC = p-
1e610 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
1e620 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  sor)!=0 ){.    i
1e630 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61  nt res;.    Unpa
1e640 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1e650 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1e660 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1e670 20 72 2e 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d   r.nField = pOp-
1e680 3e 70 33 3b 0a 20 20 20 20 72 2e 6e 65 65 64 46  >p3;.    r.needF
1e690 72 65 65 20 3d 20 30 3b 0a 20 20 20 20 72 2e 6e  ree = 0;.    r.n
1e6a0 65 65 64 44 65 73 74 72 6f 79 20 3d 20 30 3b 0a  eedDestroy = 0;.
1e6b0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
1e6c0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1e6d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e6e0 42 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 72 73  BtreeMoveto(pCrs
1e6f0 72 2c 20 30 2c 20 26 72 2c 20 30 2c 20 30 2c 20  r, 0, &r, 0, 0, 
1e700 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1e710 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1e720 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1e730 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1e740 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
1e750 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1e760 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1e770 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
1e780 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1e790 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1e7a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1e7b0 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
1e7c0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1e7d0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
1e7e0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
1e7f0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
1e800 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
1e810 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
1e820 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
1e830 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
1e840 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
1e850 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
1e860 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
1e870 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1e880 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
1e890 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
1e8a0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
1e8b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
1e8c0 77 69 64 2c 20 4d 61 6b 65 49 64 78 52 65 63 2e  wid, MakeIdxRec.
1e8d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
1e8e0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1e8f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1e900 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
1e910 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1e920 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e930 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  .  Cursor *pC;..
1e940 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1e950 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1e960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1e970 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
1e980 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
1e990 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
1e9a0 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1e9b0 20 20 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a      i64 rowid;..
1e9c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e9d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1e9e0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1e9f0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1ea00 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
1ea10 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
1ea20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1ea30 65 49 64 78 52 6f 77 69 64 28 70 43 72 73 72 2c  eIdxRowid(pCrsr,
1ea40 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20   &rowid);.      
1ea50 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ea60 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
1ea70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ea80 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1ea90 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
1eaa0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1eab0 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75  );.      pOut->u
1eac0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
1ead0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
1eae0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
1eaf0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
1eb00 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
1eb10 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
1eb20 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
1eb30 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1eb40 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
1eb50 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
1eb60 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
1eb70 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
1eb80 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
1eb90 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
1eba0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
1ebb0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
1ebc0 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
1ebd0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
1ebe0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
1ebf0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
1ec00 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1ec10 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
1ec20 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
1ec30 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
1ec40 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1ec50 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1ec60 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
1ec70 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
1ec80 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
1ec90 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
1eca0 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70  an epsilon .** p
1ecb0 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70  rior to the comp
1ecc0 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
1ecd0 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  ke the opcode wo
1ece0 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78  rk like IdxGT ex
1ecf0 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20  cept.** that if 
1ed00 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67  the key from reg
1ed10 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72  ister P3 is a pr
1ed20 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20  efix of the key 
1ed30 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a  in the cursor,.*
1ed40 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
1ed50 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74  false whereas it
1ed60 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77   would be true w
1ed70 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a  ith IdxGT..*/./*
1ed80 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
1ed90 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
1eda0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
1edb0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
1edc0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
1edd0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1ede0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
1edf0 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
1ee00 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
1ee10 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
1ee20 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
1ee30 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
1ee40 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
1ee50 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
1ee60 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
1ee70 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
1ee80 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
1ee90 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1eea0 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
1eeb0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
1eec0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
1eed0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1eee0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
1eef0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
1ef00 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
1ef10 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
1ef20 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
1ef30 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
1ef40 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
1ef50 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
1ef60 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
1ef70 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
1ef80 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
1ef90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1efa0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n3 */.case OP_Id
1efb0 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
1efc0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1efd0 69 6e 74 20 69 3d 20 70 4f 70 2d 3e 70 31 3b 0a  int i= pOp->p1;.
1efe0 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20    Cursor *pC;.. 
1eff0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1f000 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1f010 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1f020 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
1f030 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
1f040 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d  r[i])->pCursor!=
1f050 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  0 ){.    int res
1f060 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65  ;.    UnpackedRe
1f070 63 6f 72 64 20 72 3b 0a 20 20 20 20 61 73 73 65  cord r;.    asse
1f080 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1f090 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
1f0a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1f0b0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1f0c0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1f0d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1f0e0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e  _INT32 );.    r.
1f0f0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1f100 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1f110 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1f120 69 3b 0a 20 20 20 20 72 2e 6e 65 65 64 46 72 65  i;.    r.needFre
1f130 65 20 3d 20 30 3b 0a 20 20 20 20 72 2e 6e 65 65  e = 0;.    r.nee
1f140 64 44 65 73 74 72 6f 79 20 3d 20 30 3b 0a 20 20  dDestroy = 0;.  
1f150 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
1f160 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1f170 20 20 2a 70 43 2d 3e 70 49 6e 63 72 4b 65 79 20    *pC->pIncrKey 
1f180 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
1f190 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
1f1a0 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c  dxKeyCompare(pC,
1f1b0 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1f1c0 3b 0a 20 20 20 20 2a 70 43 2d 3e 70 49 6e 63 72  ;.    *pC->pIncr
1f1d0 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Key = 0;.    if(
1f1e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1f1f0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20  _IdxLT ){.      
1f200 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20  res = -res;.    
1f210 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
1f220 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1f230 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20  ==OP_IdxGE );.  
1f240 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d      res++;.    }
1f250 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29  .    if( res>0 )
1f260 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1f270 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d  ->p2 - 1 ;.    }
1f280 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
1f2a0 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
1f2b0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
1f2c0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
1f2d0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1f2e0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
1f2f0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
1f300 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
1f310 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
1f320 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
1f330 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
1f340 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1f350 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
1f360 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
1f370 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
1f380 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
1f390 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
1f3a0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
1f3b0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1f3c0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
1f3d0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
1f3e0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
1f3f0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
1f400 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
1f410 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
1f420 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
1f430 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
1f440 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
1f450 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
1f460 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
1f470 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
1f480 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
1f490 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
1f4a0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
1f4b0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
1f4c0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
1f4d0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
1f4e0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
1f4f0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
1f500 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
1f510 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
1f520 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
1f530 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
1f540 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
1f550 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
1f560 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
1f570 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
1f580 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
1f590 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
1f5a0 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
1f5b0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1f5c0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
1f5d0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
1f5e0 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
1f5f0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
1f600 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1f610 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
1f620 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
1f630 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
1f640 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1f650 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
1f660 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69  ;.  int iCnt;.#i
1f670 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f680 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1f690 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
1f6a0 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28  iCnt = 0;.  for(
1f6b0 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b  pVdbe=db->pVdbe;
1f6c0 20 70 56 64 62 65 3b 20 70 56 64 62 65 3d 70 56   pVdbe; pVdbe=pV
1f6d0 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  dbe->pNext){.   
1f6e0 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69   if( pVdbe->magi
1f6f0 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
1f700 4e 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74  N && pVdbe->inVt
1f710 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56  abMethod<2 && pV
1f720 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20  dbe->pc>=0 ){.  
1f730 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20      iCnt++;.    
1f740 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43  }.  }.#else.  iC
1f750 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56  nt = db->activeV
1f760 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20  dbeCnt;.#endif. 
1f770 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
1f780 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
1f790 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
1f7a0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
1f7b0 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
1f7c0 20 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70     int iDb = pOp
1f7d0 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
1f7e0 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
1f7f0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
1f800 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
1f810 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  ))!=0 );.    rc 
1f820 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
1f830 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
1f840 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
1f850 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
1f860 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1f870 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
1f880 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
1f890 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
1f8a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1f8b0 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
1f8c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1f8d0 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
1f8e0 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
1f8f0 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62  geMoved(&db->aDb
1f900 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70  [iDb], iMoved, p
1f910 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23  Op->p1);.    }.#
1f920 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
1f930 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1f940 20 43 6c 65 61 72 20 50 31 20 50 32 20 2a 0a 2a   Clear P1 P2 *.*
1f950 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
1f960 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
1f970 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
1f980 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1f990 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
1f9a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1f9b0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
1f9c0 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
1f9d0 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
1f9e0 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
1f9f0 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
1fa00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1fa10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
1fa20 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
1fa30 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
1fa40 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
1fa50 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
1fa60 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
1fa70 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
1fa80 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
1fa90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
1faa0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
1fab0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
1fac0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
1fad0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
1fae0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  LE..**.** See al
1faf0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
1fb00 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
1fb10 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
1fb20 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
1fb30 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
1fb40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fb50 65 43 6c 65 61 72 54 61 62 6c 65 28 64 62 2d 3e  eClearTable(db->
1fb60 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
1fb70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
1fb80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1fb90 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
1fba0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1fbb0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
1fbc0 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
1fbd0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1fbe0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
1fbf0 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
1fc00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
1fc10 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
1fc20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1fc30 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
1fc40 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
1fc50 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
1fc60 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
1fc70 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
1fc80 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
1fc90 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
1fca0 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
1fcb0 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
1fcc0 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
1fcd0 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
1fce0 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
1fcf0 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
1fd00 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
1fd10 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
1fd20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
1fd30 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1fd40 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
1fd50 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
1fd60 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
1fd70 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
1fd80 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
1fd90 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1fda0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
1fdb0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
1fdc0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1fdd0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
1fde0 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
1fdf0 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
1fe00 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
1fe10 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1fe20 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
1fe30 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
1fe40 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
1fe50 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
1fe60 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
1fe70 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
1fe80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1fe90 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
1fea0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
1feb0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1fec0 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ase */.case OP_C
1fed0 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
1fee0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1fef0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1ff00 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
1ff10 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
1ff20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ff30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1ff40 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1ff50 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1ff60 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
1ff70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
1ff80 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1ff90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ffa0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1ffb0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1ffc0 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
1ffd0 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
1ffe0 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
1fff0 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
20000 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42 54  TREE_LEAFDATA|BT
20010 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
20020 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
20030 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b   BTREE_ZERODATA;
20040 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
20050 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
20060 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
20070 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69  gno, flags);.  i
20080 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
20090 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
200a0 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 20 20 4d 65  i = pgno;.    Me
200b0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
200c0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
200d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
200e0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
200f0 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ema P1 P2 * P4 *
20100 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
20110 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
20120 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
20130 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
20140 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
20150 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
20160 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
20170 20 20 50 32 20 69 73 20 74 68 65 20 22 66 6f 72    P2 is the "for
20180 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77 61  ce" flag.   Alwa
20190 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72  ys do.** the par
201a0 73 69 6e 67 20 69 66 20 50 32 20 69 73 20 74 72  sing if P2 is tr
201b0 75 65 2e 20 20 49 66 20 50 32 20 69 73 20 66 61  ue.  If P2 is fa
201c0 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72  lse, then this r
201d0 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e  outine is a.** n
201e0 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68 65  o-op if the sche
201f0 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  ma is not curren
20200 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20  tly loaded.  In 
20210 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
20220 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20  P2.** is false, 
20230 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
20240 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20  R table is only 
20250 70 61 72 73 65 64 20 69 66 20 74 68 65 20 72 65  parsed if the re
20260 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  st of the.** sch
20270 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20 6c  ema is already l
20280 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20 73  oaded into the s
20290 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  ymbol table..**.
202a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
202b0 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
202c0 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
202d0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
202e0 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
202f0 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
20300 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
20310 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
20320 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
20330 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
20340 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  : {.  char *zSql
20350 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f  ;.  int iDb = pO
20360 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73 74 20 63  p->p1;.  const c
20370 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
20380 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
20390 61 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44  a;..  assert( iD
203a0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
203b0 6e 44 62 20 29 3b 0a 20 20 69 66 28 20 21 70 4f  nDb );.  if( !pO
203c0 70 2d 3e 70 32 20 26 26 20 21 44 62 48 61 73 50  p->p2 && !DbHasP
203d0 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
203e0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
203f0 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ) ){.    break;.
20400 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72 20 3d 20    }.  zMaster = 
20410 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
20420 29 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62  );.  initData.db
20430 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74   = db;.  initDat
20440 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
20450 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72  .  initData.pzEr
20460 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
20470 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c  sg;.  zSql = sql
20480 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
20490 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
204a0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
204b0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
204c0 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 64 62  ERE %s",.     db
204d0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
204e0 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
204f0 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20 7a 53 71  p4.z);.  if( zSq
20500 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  l==0 ) goto no_m
20510 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69  em;.  (void)sqli
20520 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
20530 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
20540 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
20550 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
20560 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 21  = 1;.  assert( !
20570 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
20580 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
20590 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
205a0 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
205b0 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
205c0 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , 0);.  if( rc==
205d0 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 29 20 72  SQLITE_ABORT ) r
205e0 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
205f0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
20600 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 64 62  (db, zSql);.  db
20610 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
20620 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
20630 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20  SafetyOn(db);.  
20640 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
20650 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
20660 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
20670 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
20680 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20690 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20  MIT_ANALYZE) && 
206a0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
206b0 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a 2f 2a 20  OMIT_PARSER)./* 
206c0 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
206d0 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
206e0 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
206f0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
20700 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
20710 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
20720 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
20730 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
20740 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
20750 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
20760 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
20770 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
20780 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
20790 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
207a0 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
207b0 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
207c0 61 6c 79 73 69 73 3a 20 7b 0a 20 20 69 6e 74 20  alysis: {.  int 
207d0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
207e0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
207f0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
20800 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
20810 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
20820 20 69 44 62 29 3b 0a 20 20 62 72 65 61 6b 3b 20   iDb);.  break; 
20830 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
20840 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
20850 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20 21  IT_ANALYZE) && !
20860 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20870 4d 49 54 5f 50 41 52 53 45 52 29 20 20 2a 2f 0a  MIT_PARSER)  */.
20880 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
20890 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
208a0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
208b0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
208c0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
208d0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
208e0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
208f0 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
20900 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
20910 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
20920 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
20930 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
20940 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
20950 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
20960 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
20970 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
20980 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
20990 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
209a0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
209b0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
209c0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
209d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
209e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
209f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
20a00 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
20a10 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
20a20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
20a30 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
20a40 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
20a50 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
20a60 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
20a70 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
20a80 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
20a90 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
20aa0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
20ab0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
20ac0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
20ad0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
20ae0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
20af0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
20b00 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
20b10 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
20b20 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
20b30 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
20b40 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
20b50 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
20b60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
20b70 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
20b80 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
20b90 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
20ba0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
20bb0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
20bc0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
20bd0 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
20be0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
20bf0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
20c00 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
20c10 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
20c20 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
20c30 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
20c40 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
20c50 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
20c60 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
20c70 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
20c80 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
20c90 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
20ca0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
20cb0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
20cc0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
20cd0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
20ce0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20cf0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
20d00 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
20d10 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
20d20 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
20d30 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
20d40 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
20d50 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
20d60 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
20d70 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
20d80 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
20d90 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
20da0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
20db0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
20dc0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
20dd0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
20de0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
20df0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
20e00 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
20e10 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
20e20 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
20e30 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
20e40 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
20e50 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
20e60 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
20e70 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
20e80 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
20e90 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
20ea0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
20eb0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
20ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
20ed0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
20ee0 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
20ef0 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
20f00 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
20f10 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
20f20 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
20f30 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
20f40 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
20f50 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
20f60 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
20f70 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
20f80 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
20f90 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
20fa0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
20fb0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
20fc0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
20fd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
20fe0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20ff0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
21000 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
21010 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
21020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
21030 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
21040 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
21050 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
21060 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
21070 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
21080 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
21090 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
210a0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
210b0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
210c0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
210d0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
210e0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
210f0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
21100 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
21110 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
21120 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
21130 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
21140 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
21150 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
21160 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
21170 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
21180 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
21190 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20   remaining */.  
211a0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
211b0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
211c0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
211d0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
211e0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
211f0 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
21200 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
21210 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
21220 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21230 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
21240 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e  =p->nMem );.  pn
21250 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Err = &p->aMem[p
21260 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
21270 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
21280 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
21290 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
212a0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
212b0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
212c0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
212d0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
212e0 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
212f0 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
21300 61 52 6f 6f 74 5b 6a 5d 20 3d 20 73 71 6c 69 74  aRoot[j] = sqlit
21310 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
21320 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
21330 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
21340 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
21350 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
21360 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
21370 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35  sk & (1<<pOp->p5
21380 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73  ))!=0 );.  z = s
21390 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
213a0 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
213b0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
213c0 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
213f0 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
21400 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
21410 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
21420 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
21430 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
21440 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
21450 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
21460 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
21470 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
21480 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
21490 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
214a0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
214b0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
214c0 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
214d0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
214e0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
214f0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
21500 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
21510 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
21520 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
21530 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
21540 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
21550 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
21560 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
21570 70 63 6f 64 65 3a 20 46 69 66 6f 57 72 69 74 65  pcode: FifoWrite
21580 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
21590 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
215a0 67 65 72 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ger from registe
215b0 72 20 50 31 20 69 6e 74 6f 20 74 68 65 20 46 69  r P1 into the Fi
215c0 66 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  fo..*/.case OP_F
215d0 69 66 6f 57 72 69 74 65 3a 20 7b 20 20 20 20 20  ifoWrite: {     
215e0 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
215f0 2d 3e 73 46 69 66 6f 2e 64 62 20 3d 20 64 62 3b  ->sFifo.db = db;
21600 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
21610 62 65 46 69 66 6f 50 75 73 68 28 26 70 2d 3e 73  beFifoPush(&p->s
21620 46 69 66 6f 2c 20 73 71 6c 69 74 65 33 56 64 62  Fifo, sqlite3Vdb
21630 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
21640 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
21650 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
21660 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  m;.  }.  break;.
21670 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 69  }../* Opcode: Fi
21680 66 6f 52 65 61 64 20 50 31 20 50 32 20 2a 20 2a  foRead P1 P2 * *
21690 20 2a 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74   *.**.** Attempt
216a0 20 74 6f 20 72 65 61 64 20 61 20 73 69 6e 67 6c   to read a singl
216b0 65 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 74  e integer from t
216c0 68 65 20 46 69 66 6f 2e 20 20 53 74 6f 72 65 20  he Fifo.  Store 
216d0 74 68 61 74 0a 2a 2a 20 69 6e 74 65 67 65 72 20  that.** integer 
216e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
216f0 2a 2a 20 0a 2a 2a 20 49 66 20 74 68 65 20 46 69  ** .** If the Fi
21700 66 6f 20 69 73 20 65 6d 70 74 79 20 6a 75 6d 70  fo is empty jump
21710 20 74 6f 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   to P2..*/.case 
21720 4f 50 5f 46 69 66 6f 52 65 61 64 3a 20 7b 20 20  OP_FifoRead: {  
21730 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
21740 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  /.  CHECK_FOR_IN
21750 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72  TERRUPT;.  asser
21760 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
21770 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
21780 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   );.  pOut = &p-
21790 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
217a0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
217b0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
217c0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
217d0 62 65 46 69 66 6f 50 6f 70 28 26 70 2d 3e 73 46  beFifoPop(&p->sF
217e0 69 66 6f 2c 20 26 70 4f 75 74 2d 3e 75 2e 69 29  ifo, &pOut->u.i)
217f0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
21800 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
21810 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
21820 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
21830 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
21840 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  ER./* Opcode: Co
21850 6e 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20  ntextPush * * * 
21860 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20  .**.** Save the 
21870 63 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e  current Vdbe con
21880 74 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69  text such that i
21890 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
218a0 64 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f  d by a ContextPo
218b0 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65  p.** opcode. The
218c0 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20   context stores 
218d0 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
218e0 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74  row id, the last
218f0 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
21900 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20  e.** count, and 
21910 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
21920 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75  ement change cou
21930 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  nt..*/.case OP_C
21940 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20  ontextPush: {.  
21950 69 6e 74 20 69 20 3d 20 70 2d 3e 63 6f 6e 74 65  int i = p->conte
21960 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20  xtStackTop++;.  
21970 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78  Context *pContex
21980 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  t;..  assert( i>
21990 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58 20 4d  =0 );.  /* FIX M
219a0 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  E: This should b
219b0 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 70  e allocated as p
219c0 61 72 74 20 6f 66 20 74 68 65 20 76 64 62 65 20  art of the vdbe 
219d0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
219e0 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d 3e 63  */.  if( i>=p->c
219f0 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68  ontextStackDepth
21a00 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65   ){.    p->conte
21a10 78 74 53 74 61 63 6b 44 65 70 74 68 20 3d 20 69  xtStackDepth = i
21a20 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65  +1;.    p->conte
21a30 78 74 53 74 61 63 6b 20 3d 20 73 71 6c 69 74 65  xtStack = sqlite
21a40 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
21a50 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78 74 53  (db, p->contextS
21a60 74 61 63 6b 2c 0a 20 20 20 20 20 20 20 20 20 20  tack,.          
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a90 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74 29 2a  sizeof(Context)*
21aa0 28 69 2b 31 29 29 3b 0a 20 20 20 20 69 66 28 20  (i+1));.    if( 
21ab0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 3d  p->contextStack=
21ac0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
21ad0 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65 78 74  ;.  }.  pContext
21ae0 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74   = &p->contextSt
21af0 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e 74 65  ack[i];.  pConte
21b00 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  xt->lastRowid = 
21b10 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
21b20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e   pContext->nChan
21b30 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
21b40 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 73 46 69  .  pContext->sFi
21b50 66 6f 20 3d 20 70 2d 3e 73 46 69 66 6f 3b 0a 20  fo = p->sFifo;. 
21b60 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
21b70 49 6e 69 74 28 26 70 2d 3e 73 46 69 66 6f 2c 20  Init(&p->sFifo, 
21b80 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  db);.  break;.}.
21b90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74  ./* Opcode: Cont
21ba0 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a  extPop * * * .**
21bb0 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20  .** Restore the 
21bc0 56 64 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20  Vdbe context to 
21bd0 74 68 65 20 73 74 61 74 65 20 69 74 20 77 61 73  the state it was
21be0 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74   in when context
21bf0 50 75 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a  Push was last.**
21c00 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20 63   executed. The c
21c10 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74 68  ontext stores th
21c20 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  e last insert ro
21c30 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73  w id, the last s
21c40 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e  tatement.** chan
21c50 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68  ge count, and th
21c60 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
21c70 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ent change count
21c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
21c90 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e  textPop: {.  Con
21ca0 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 20 3d  text *pContext =
21cb0 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63   &p->contextStac
21cc0 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74  k[--p->contextSt
21cd0 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72  ackTop];.  asser
21ce0 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  t( p->contextSta
21cf0 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62  ckTop>=0 );.  db
21d00 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 43  ->lastRowid = pC
21d10 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69  ontext->lastRowi
21d20 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  d;.  p->nChange 
21d30 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61  = pContext->nCha
21d40 6e 67 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  nge;.  sqlite3Vd
21d50 62 65 46 69 66 6f 43 6c 65 61 72 28 26 70 2d 3e  beFifoClear(&p->
21d60 73 46 69 66 6f 29 3b 0a 20 20 70 2d 3e 73 46 69  sFifo);.  p->sFi
21d70 66 6f 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 73  fo = pContext->s
21d80 46 69 66 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Fifo;.  break;.}
21d90 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
21da0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
21db0 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
21dc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
21dd0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
21de0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
21df0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21e00 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
21e10 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
21e20 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
21e30 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
21e40 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  e.** and the val
21e50 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
21e60 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
21e70 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
21e80 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
21e90 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
21ea0 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
21eb0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
21ec0 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
21ed0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c  {        /* in1,
21ee0 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69 74 65   in2 */.  sqlite
21ef0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
21f00 66 79 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  fy(pIn1);.  sqli
21f10 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
21f20 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
21f30 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
21f40 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
21f50 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
21f60 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
21f70 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
21f80 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
21f90 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
21fa0 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
21fb0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
21fc0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
21fd0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
21fe0 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
21ff0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
22000 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
22010 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
22020 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
22030 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
22040 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22050 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
22060 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
22070 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
22080 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
22090 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
220a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73  ump, in1 */.  as
220b0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
220c0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
220d0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
220e0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
220f0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
22100 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22110 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
22120 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
22130 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
22140 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
22150 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
22160 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
22170 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
22180 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
22190 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
221a0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
221b0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
221c0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
221d0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
221e0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
221f0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
22200 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
22210 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
22220 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
22230 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
22240 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
22250 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
22260 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
22270 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22280 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
22290 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
222a0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
222b0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 65 78  egister P1 is ex
222c0 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f  actly 0, jump to
222d0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
222e0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
222f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
22300 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
22310 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
22320 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22330 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
22340 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
22350 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
22360 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65  .*/.case OP_IfZe
22370 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
22380 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61  jump, in1 */.  a
22390 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
223a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
223b0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
223c0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
223d0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
223e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
223f0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
22400 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
22410 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
22420 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
22430 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
22440 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
22450 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
22460 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
22470 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
22480 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
22490 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
224a0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
224b0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
224c0 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
224d0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
224e0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
224f0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
22500 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
22510 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
22520 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
22530 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70   {.  int n = pOp
22540 2d 3e 70 35 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  ->p5;.  int i;. 
22550 20 4d 65 6d 20 2a 70 4d 65 6d 2c 20 2a 70 52 65   Mem *pMem, *pRe
22560 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c;.  sqlite3_con
22570 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
22580 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
22590 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  l;..  assert( n>
225a0 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
225b0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
225c0 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
225d0 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
225e0 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
225f0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
22600 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
22610 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
22620 65 63 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  ec;.    storeTyp
22630 65 49 6e 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f  eInfo(pRec, enco
22640 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78  ding);.  }.  ctx
22650 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
22660 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
22670 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
22680 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
22690 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
226a0 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
226b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
226c0 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
226d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
226e0 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
226f0 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
22700 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
22710 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
22720 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
22730 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
22740 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66  .pColl = 0;.  if
22750 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 6e 65 65  ( ctx.pFunc->nee
22760 64 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20 20  dCollSeq ){.    
22770 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
22780 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
22790 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
227a0 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
227b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
227c0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
227d0 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
227e0 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
227f0 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
22800 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
22810 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
22820 56 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e  Val);.  if( ctx.
22830 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
22840 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
22850 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
22860 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
22870 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
22880 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
22890 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
228a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
228b0 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
228c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
228d0 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
228e0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
228f0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
22900 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
22910 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
22920 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
22930 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
22940 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
22950 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
22960 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
22970 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
22980 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
22990 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
229a0 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
229b0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
229c0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
229d0 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
229e0 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
229f0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
22a00 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
22a10 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
22a20 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
22a30 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
22a40 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
22a50 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
22a60 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
22a70 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
22a80 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
22a90 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
22aa0 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
22ab0 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
22ac0 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
22ad0 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
22ae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
22af0 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
22b00 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
22b10 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
22b20 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
22b30 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  .  pMem = &p->aM
22b40 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
22b50 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
22b60 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
22b70 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
22b80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22b90 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
22ba0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
22bb0 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  nc);.  if( rc==S
22bc0 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 7b 0a 20  QLITE_ERROR ){. 
22bd0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
22be0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
22bf0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
22c00 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
22c10 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
22c20 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
22c30 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
22c40 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
22c50 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
22c60 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
22c70 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
22c80 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
22c90 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
22ca0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21  break;.}...#if !
22cb0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22cc0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
22cd0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22ce0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
22cf0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
22d00 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
22d10 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
22d20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
22d30 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
22d40 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
22d50 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
22d60 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
22d70 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
22d80 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
22d90 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
22da0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
22db0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66  P_Vacuum: {.  if
22dc0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
22dd0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
22de0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
22df0 65 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e; .  rc = sqlit
22e00 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
22e10 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
22e20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
22e30 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
22e40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
22e50 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  se;.  break;.}.#
22e60 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
22e70 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22e80 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
22e90 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
22ea0 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
22eb0 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
22ec0 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
22ed0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
22ee0 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
22ef0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
22f00 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
22f10 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
22f20 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
22f30 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
22f40 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
22f50 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
22f60 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
22f70 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
22f80 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
22f90 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
22fa0 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
22fb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22fc0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
22fd0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
22fe0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
22ff0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
23000 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
23010 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
23020 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23030 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
23040 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
23050 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
23060 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
23070 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
23080 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
23090 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
230a0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
230b0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
230c0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
230d0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
230e0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
230f0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
23100 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
23110 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
23120 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
23130 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
23140 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
23150 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
23160 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
23170 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
23180 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
23190 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
231a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
231b0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
231c0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
231d0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
231e0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
231f0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
23200 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
23210 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
23220 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
23230 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
23240 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
23250 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
23260 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
23270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
23280 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
23290 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
232a0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
232b0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
232c0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
232d0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
232e0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
232f0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
23300 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
23310 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
23320 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ed. .**.** If P1
23330 20 69 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f   is  the index o
23340 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
23350 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
23360 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
23370 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
23380 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
23390 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
233a0 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
233b0 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
233c0 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
233d0 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
233e0 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
233f0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
23400 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
23410 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
23420 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
23430 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
23440 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
23450 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
23460 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
23470 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
23480 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
23490 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
234a0 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
234b0 20 7b 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f   {.  int p1 = pO
234c0 70 2d 3e 70 31 3b 20 0a 20 20 75 38 20 69 73 57  p->p1; .  u8 isW
234d0 72 69 74 65 4c 6f 63 6b 20 3d 20 70 4f 70 2d 3e  riteLock = pOp->
234e0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p3;.  assert( p1
234f0 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
23500 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
23510 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
23520 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  1<<p1))!=0 );.  
23530 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
23540 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
23550 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72 63  eLock==1 );.  rc
23560 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
23570 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
23580 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
23590 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
235a0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
235b0 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
235c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
235d0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 73  pOp->p4.z;.    s
235e0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
235f0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
23600 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
23610 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
23620 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   z);.  }.  break
23630 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
23640 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
23650 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
23660 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
23670 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
23680 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
23690 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
236a0 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
236b0 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
236c0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
236d0 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
236e0 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
236f0 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
23700 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
23710 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
23720 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
23730 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
23740 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
23750 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
23760 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
23770 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
23780 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
23790 69 73 2c 20 73 65 74 20 74 68 65 0a 2a 2a 20 65  is, set the.** e
237a0 72 72 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c  rror code to SQL
237b0 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
237c0 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
237d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
237e0 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34  *pVtab = pOp->p4
237f0 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
23800 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
23810 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  db, pVtab);.  if
23820 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73  ( pVtab ){.    s
23830 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
23840 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
23850 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
23860 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
23870 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
23880 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  g = 0;.  }.  bre
23890 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
238a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
238b0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
238c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
238d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
238e0 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
238f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
23900 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
23910 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
23920 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
23930 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
23940 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
23950 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
23960 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
23970 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
23980 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
23990 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
239a0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
239b0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
239c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
239d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
239e0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
239f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
23a00 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
23a10 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
23a20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
23a30 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
23a40 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
23a50 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
23a60 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
23a70 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
23a80 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
23a90 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
23aa0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
23ab0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
23ac0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
23ad0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
23ae0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
23af0 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
23b00 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
23b10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
23b20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23b30 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
23b40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23b50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
23b60 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
23b70 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
23b80 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
23b90 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
23ba0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
23bb0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
23bc0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
23bd0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
23be0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
23bf0 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
23c00 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
23c10 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
23c20 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
23c30 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
23c40 4f 70 65 6e 3a 20 7b 0a 20 20 43 75 72 73 6f 72  Open: {.  Cursor
23c50 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20 20 73 71   *pCur = 0;.  sq
23c60 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
23c70 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r *pVtabCursor =
23c80 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76   0;..  sqlite3_v
23c90 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70  tab *pVtab = pOp
23ca0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71  ->p4.pVtab;.  sq
23cb0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
23cc0 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
23cd0 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
23ce0 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  >pModule;..  ass
23cf0 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
23d00 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  dule);.  if( sql
23d10 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
23d20 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
23d30 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
23d40 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
23d50 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
23d60 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69  bCursor);.  sqli
23d70 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
23d80 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
23d90 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
23da0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
23db0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
23dc0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
23dd0 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
23de0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
23df0 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49  suse;.  if( SQLI
23e00 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
23e10 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
23e20 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
23e30 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
23e40 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
23e50 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
23e60 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
23e70 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ise vdbe cursor 
23e80 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
23e90 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
23ea0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
23eb0 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29  &pOp[-1], -1, 0)
23ec0 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
23ed0 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
23ee0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
23ef0 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70  bCursor;.      p
23f00 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70  Cur->pModule = p
23f10 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
23f20 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
23f30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
23f40 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
23f50 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
23f60 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
23f70 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
23f80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
23f90 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
23fa0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
23fb0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
23fc0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23fd0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
23fe0 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
23ff0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P4 *.**.** P1 is
24000 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
24010 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
24020 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
24030 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
24040 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
24050 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
24060 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
24070 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
24080 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
24090 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
240a0 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
240b0 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
240c0 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
240d0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
240e0 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
240f0 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
24100 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
24110 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
24120 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
24130 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
24140 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
24150 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
24160 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
24170 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
24180 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
24190 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
241a0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
241b0 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
241c0 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
241d0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
241e0 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
241f0 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
24200 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
24210 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
24220 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
24230 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
24240 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
24250 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
24260 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
24270 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
24280 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
24290 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
242a0 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
242b0 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
242c0 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
242d0 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
242e0 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
242f0 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
24300 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
24310 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
24320 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
24330 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
24340 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
24350 20 2a 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61   *pQuery = &p->a
24360 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
24370 4d 65 6d 20 2a 70 41 72 67 63 20 3d 20 26 70 51  Mem *pArgc = &pQ
24380 75 65 72 79 5b 31 5d 3b 0a 20 20 73 71 6c 69 74  uery[1];.  sqlit
24390 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
243a0 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
243b0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
243c0 61 62 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a 70  ab;..  Cursor *p
243d0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
243e0 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52 45 47 49  Op->p1];..  REGI
243f0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
24400 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
24410 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
24420 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
24430 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
24440 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
24450 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
24460 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
24470 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24480 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
24490 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
244a0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
244b0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
244c0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
244d0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
244e0 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
244f0 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
24500 41 72 67 20 3d 20 70 41 72 67 63 2d 3e 75 2e 69  Arg = pArgc->u.i
24510 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 70 51 75  ;.  iQuery = pQu
24520 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
24530 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
24540 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b  er method */.  {
24550 0a 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20 30  .    int res = 0
24560 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
24570 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70   Mem **apArg = p
24580 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
24590 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
245a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
245b0 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
245c0 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54  1];.      storeT
245d0 79 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d  ypeInfo(apArg[i]
245e0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
245f0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
24600 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
24610 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
24620 73 75 73 65 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  suse;.    p->inV
24630 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
24640 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
24650 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
24660 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
24670 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
24680 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
24690 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
246a0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
246b0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
246c0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
246d0 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
246e0 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
246f0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
24700 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
24710 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
24720 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
24730 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
24740 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
24750 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
24760 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24770 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20  to_misuse;..    
24780 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
24790 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
247a0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
247b0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
247c0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  ;..  break;.}.#e
247d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
247e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
247f0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
24800 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
24810 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
24820 20 56 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20   VRowid P1 P2 * 
24830 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
24840 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
24850 20 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a    the rowid of.*
24860 2a 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  * the virtual-ta
24870 62 6c 65 20 74 68 61 74 20 74 68 65 20 50 31 20  ble that the P1 
24880 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
24890 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ng to..*/.case O
248a0 50 5f 56 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  P_VRowid: {     
248b0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
248c0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
248d0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
248e0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
248f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
24900 64 75 6c 65 3b 0a 20 20 73 71 6c 69 74 65 5f 69  dule;.  sqlite_i
24910 6e 74 36 34 20 69 52 6f 77 3b 0a 20 20 43 75 72  nt64 iRow;.  Cur
24920 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
24930 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a  pCsr[pOp->p1];..
24940 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
24950 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
24960 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
24970 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
24980 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
24990 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
249a0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
249b0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
249c0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
249d0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
249e0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
249f0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
24a00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24a10 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
24a20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
24a30 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
24a40 72 2c 20 26 69 52 6f 77 29 3b 0a 20 20 73 71 6c  r, &iRow);.  sql
24a50 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
24a60 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
24a70 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
24a80 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
24a90 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
24aa0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
24ab0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
24ac0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
24ad0 69 73 75 73 65 3b 0a 20 20 4d 65 6d 53 65 74 54  isuse;.  MemSetT
24ae0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
24af0 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  M_Int);.  pOut->
24b00 75 2e 69 20 3d 20 69 52 6f 77 3b 0a 20 20 62 72  u.i = iRow;.  br
24b10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
24b20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24b30 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
24b40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24b50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
24b60 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
24b70 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
24b80 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
24b90 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
24ba0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
24bb0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
24bc0 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
24bd0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
24be0 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
24bf0 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
24c00 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
24c10 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
24c20 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
24c30 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
24c40 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
24c50 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
24c60 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
24c70 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 43  t sContext;..  C
24c80 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
24c90 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24ca0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
24cb0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
24cc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24cd0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
24ce0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
24cf0 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  st = &p->aMem[pO
24d00 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43  p->p3];.  if( pC
24d10 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
24d20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
24d30 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
24d40 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
24d50 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
24d60 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
24d70 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
24d80 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
24d90 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
24da0 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
24db0 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
24dc0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
24dd0 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68  text));..  /* Th
24de0 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
24df0 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
24e00 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
24e10 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
24e20 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74   current content
24e30 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20  s to sContext.s 
24e40 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
24e50 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20  ser-function .  
24e60 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61  ** can use the a
24e70 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
24e80 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
24e90 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
24ea0 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20  .  ** new one.. 
24eb0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
24ec0 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65  eMemMove(&sConte
24ed0 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20  xt.s, pDest);.  
24ee0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
24ef0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f  sContext.s, MEM_
24f00 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71  Null);..  if( sq
24f10 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
24f20 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
24f30 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
24f40 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
24f50 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
24f60 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
24f70 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
24f80 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
24f90 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
24fa0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
24fb0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
24fc0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
24fd0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  = 0;..  /* Copy 
24fe0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
24ff0 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
25000 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57  e P3 register. W
25010 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72  e.  ** do this r
25020 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
25030 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
25040 72 72 6f 72 20 6f 63 63 75 72 65 64 20 74 6f 20  rror occured to 
25050 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
25060 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
25070 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
25080 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
25090 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
250a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
250b0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
250c0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
250d0 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
250e0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
250f0 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74   pDest);.  sqlit
25100 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
25110 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
25120 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
25130 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
25140 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
25150 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
25160 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
25170 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d  e_to_misuse;.  }
25180 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
25190 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
251a0 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
251b0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
251c0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
251d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
251e0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
251f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25200 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25210 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
25220 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
25230 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
25240 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
25250 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
25260 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
25270 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
25280 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
25290 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
252a0 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
252b0 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
252c0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
252d0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
252e0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
252f0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
25300 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
25310 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
25320 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
25330 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
25340 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
25350 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20  le;.  int res = 
25360 30 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  0;..  Cursor *pC
25370 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
25380 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25390 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
253a0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75  sor );.  if( pCu
253b0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
253c0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
253d0 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
253e0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
253f0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
25400 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
25410 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
25420 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
25430 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
25440 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
25450 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
25460 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
25470 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
25480 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
25490 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
254a0 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
254b0 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
254c0 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
254d0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
254e0 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
254f0 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
25500 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
25510 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
25520 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
25530 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
25540 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
25550 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
25560 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
25570 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
25580 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
25590 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
255a0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
255b0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
255c0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
255d0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
255e0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
255f0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
25600 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
25610 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
25620 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44   = 0;.  sqlite3D
25630 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
25640 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
25650 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
25660 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
25670 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66  ErrMsg = 0;.  if
25680 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
25690 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
256a0 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
256b0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
256c0 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
256d0 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
256e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
256f0 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20  _misuse;..  if( 
25700 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
25710 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
25720 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
25730 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
25740 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
25750 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
25760 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
25770 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
25780 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25790 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
257a0 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
257b0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
257c0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
257d0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
257e0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
257f0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
25800 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
25810 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
25820 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
25830 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
25840 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
25850 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
25860 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
25870 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
25880 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
25890 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
258a0 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
258b0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d  e3_vtab *pVtab =
258c0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
258d0 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d 20 26    Mem *pName = &
258e0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
258f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
25900 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
25910 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ame );.  REGISTE
25920 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
25930 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72 69   pName);..  Stri
25940 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e 63  ngify(pName, enc
25950 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20 73  oding);..  if( s
25960 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
25970 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
25980 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
25990 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
259a0 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63 20 3d  k(pVtab);.  rc =
259b0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
259c0 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
259d0 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c  pName->z);.  sql
259e0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
259f0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
25a00 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
25a10 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
25a20 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
25a30 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  .  sqlite3VtabUn
25a40 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b  lock(db, pVtab);
25a50 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
25a60 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
25a70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
25a80 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b  isuse;..  break;
25a90 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
25aa0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25ab0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
25ac0 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
25ad0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
25ae0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
25af0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
25b00 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
25b10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
25b20 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
25b30 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
25b40 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
25b50 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
25b60 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
25b70 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
25b80 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
25b90 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
25ba0 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
25bb0 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
25bc0 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
25bd0 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
25be0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
25bf0 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
25c00 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
25c10 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
25c20 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
25c30 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
25c40 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
25c50 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
25c60 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
25c70 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
25c80 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
25c90 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
25ca0 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
25cb0 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
25cc0 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
25cd0 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
25ce0 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
25cf0 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
25d00 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
25d10 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
25d20 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
25d30 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
25d40 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
25d50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
25d60 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
25d70 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
25d80 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
25d90 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
25da0 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
25db0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
25dc0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
25dd0 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
25de0 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
25df0 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
25e00 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
25e10 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
25e20 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
25e30 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
25e40 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
25e50 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
25e60 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
25e70 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
25e80 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
25e90 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
25ea0 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
25eb0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
25ec0 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
25ed0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
25ee0 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
25ef0 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
25f00 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
25f10 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
25f20 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70  tab *pVtab = pOp
25f30 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71  ->p4.pVtab;.  sq
25f40 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
25f50 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
25f60 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
25f70 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  >pModule;.  int 
25f80 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
25f90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25fa0 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
25fb0 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d  ;.  if( pModule-
25fc0 3e 78 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20  >xUpdate==0 ){. 
25fd0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
25fe0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
25ff0 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e 6c 79 20   db, "read-only 
26000 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 72 63 20  table");.    rc 
26010 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
26020 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74    }else{.    int
26030 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f 69   i;.    sqlite_i
26040 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 20 20  nt64 rowid;.    
26050 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d  Mem **apArg = p-
26060 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d 65 6d 20  >apArg;.    Mem 
26070 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  *pX = &p->aMem[p
26080 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
26090 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
260a0 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72 65 54  +){.      storeT
260b0 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a  ypeInfo(pX, 0);.
260c0 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
260d0 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b   pX;.      pX++;
260e0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
260f0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
26100 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
26110 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
26120 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c      sqlite3VtabL
26130 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20  ock(pVtab);.    
26140 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
26150 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
26160 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
26170 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
26180 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
26190 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
261a0 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
261b0 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
261c0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
261d0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e     sqlite3VtabUn
261e0 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b  lock(db, pVtab);
261f0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
26200 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
26210 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
26220 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 69 66 28  _misuse;.    if(
26230 20 70 4f 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d   pOp->p1 && rc==
26240 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
26250 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e     assert( nArg>
26260 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26  1 && apArg[0] &&
26270 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67   (apArg[0]->flag
26280 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20  s&MEM_Null) );. 
26290 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77       db->lastRow
262a0 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
262b0 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  }.    p->nChange
262c0 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
262d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
262e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
262f0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
26300 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
26310 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
26320 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
26330 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
26340 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
26350 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
26360 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
26370 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
26380 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
26390 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
263a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
263b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
263c0 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d  .  int p1 = pOp-
263d0 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e 50 61 67  >p1; .  int nPag
263e0 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  e;.  Pager *pPag
263f0 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
26400 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70  ePager(db->aDb[p
26410 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72 63 20 3d  1].pBt);..  rc =
26420 20 73 71 6c 69 74 65 33 50 61 67 65 72 50 61 67   sqlite3PagerPag
26430 65 63 6f 75 6e 74 28 70 50 61 67 65 72 2c 20 26  ecount(pPager, &
26440 6e 50 61 67 65 29 3b 0a 20 20 69 66 28 20 72 63  nPage);.  if( rc
26450 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
26460 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
26470 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
26480 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b  ut->u.i = nPage;
26490 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
264a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
264b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
264c0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  E./* Opcode: Tra
264d0 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  ce * * * P4 *.**
264e0 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
264f0 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
26500 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
26510 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
26520 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
26530 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
26540 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
26550 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
26560 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  allback..*/.case
26570 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 69   OP_Trace: {.  i
26580 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
26590 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61      if( db->xTra
265a0 63 65 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  ce ){.      db->
265b0 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
265c0 65 41 72 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  eArg, pOp->p4.z)
265d0 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  ;.    }.#ifdef S
265e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
265f0 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
26600 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
26610 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )!=0 ){.      sq
26620 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
26630 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c  ("SQL-trace: %s\
26640 6e 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n", pOp->p4.z);.
26650 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
26660 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
26670 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
26680 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
26690 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
266a0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
266b0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
266c0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
266d0 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
266e0 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
266f0 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
26700 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
26710 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
26720 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
26730 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
26740 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
26750 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
26760 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
26770 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
26780 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
26790 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
267a0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
267b0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
267c0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
267d0 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
267e0 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
267f0 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
26800 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
26810 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
26820 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
26830 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
26840 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  */.  break;.}../
26850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
268a0 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
268b0 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
268c0 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
268d0 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
268e0 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
268f0 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
26900 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
26910 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
26920 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
26930 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
26940 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
26950 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
26960 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
26970 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
26980 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
26990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
269e0 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
269f0 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
26a00 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64       u64 elapsed
26a10 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
26a20 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  () - start;.    
26a30 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d    pOp->cycles +=
26a40 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20   elapsed;.      
26a50 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20  pOp->cnt++;.#if 
26a60 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  0.        fprint
26a70 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c  f(stdout, "%10ll
26a80 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20  u ", elapsed);. 
26a90 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
26aa0 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
26ab0 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f  , origPc, &p->aO
26ac0 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
26ad0 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
26ae0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
26af0 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
26b00 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
26b10 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
26b20 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
26b30 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
26b40 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
26b50 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
26b60 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
26b70 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
26b80 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
26b90 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
26ba0 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
26bb0 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
26bc0 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
26bd0 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
26be0 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
26bf0 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
26c00 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
26c10 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
26c20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
26c30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26c40 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
26c50 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
26c60 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e  f( rc!=0 ) fprin
26c70 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d  tf(p->trace,"rc=
26c80 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
26c90 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20   if( opProperty 
26ca0 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
26cb0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
26cc0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
26cd0 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
26ce0 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
26cf0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50   }.      if( opP
26d00 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
26d10 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20  OUT3 ){.        
26d20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
26d30 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c  >trace, pOp->p3,
26d40 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
26d50 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a      }.#endif  /*
26d60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
26d70 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42  .#endif  /* NDEB
26d80 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68  UG */.  }  /* Th
26d90 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72  e end of the for
26da0 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f  (;;) loop the lo
26db0 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f  ops through opco
26dc0 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  des */..  /* If 
26dd0 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
26de0 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  int, it means th
26df0 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  at execution is 
26e00 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20  finished with.  
26e10 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73  ** an error of s
26e20 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76  ome kind..  */.v
26e30 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a  dbe_error_halt:.
26e40 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a    assert( rc );.
26e50 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
26e60 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
26e70 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
26e80 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
26e90 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
26ea0 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
26eb0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20  SQLITE_ERROR;.. 
26ec0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
26ed0 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
26ee0 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
26ef0 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
26f00 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
26f10 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
26f20 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
26f30 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
26f40 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
26f50 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  n:.  sqlite3Btre
26f60 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76 65  eMutexArrayLeave
26f70 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20  (&p->aMutex);.  
26f80 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
26f90 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
26fa0 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
26fb0 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
26fc0 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
26fd0 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
26fe0 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
26ff0 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
27000 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27010 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
27020 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
27030 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
27040 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
27050 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
27060 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
27070 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
27080 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
27090 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
270a0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
270b0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
270c0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
270d0 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
270e0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
270f0 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
27100 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
27110 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
27120 72 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45  re for an SQLITE
27130 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20  _MISUSE error.. 
27140 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
27150 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20  _misuse:.  rc = 
27160 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
27170 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e   /* Fall thru in
27180 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27190 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a  error */..  /* J
271a0 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
271b0 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
271c0 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
271d0 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
271e0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
271f0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
27200 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
27210 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
27220 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
27230 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
27240 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
27250 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
27260 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
27270 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
27280 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
27290 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
272a0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
272b0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
272c0 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
272d0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
272e0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
272f0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
27300 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
27310 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
27320 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
27330 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
27340 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
27350 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
27360 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
27370 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
27380 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
27390 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
273a0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
273b0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
273c0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
273d0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
273e0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.