/ Hex Artifact Content
Login

Artifact 78e24995434444af5e70954bc2a3c11b7df8ce09:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 30 30 20 32 30 30 38  e.c,v 1.800 2008
0850: 2f 31 32 2f 31 31 20 31 39 3a 35 30 3a 31 39 20  /12/11 19:50:19 
0860: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
0870: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0880: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74  .h".#include <ct
0890: 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ype.h>.#include 
08a0: 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a  "vdbeInt.h"../*.
08b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
08c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
08d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
08e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
08f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0900: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 4d  ther by the OP_M
0910: 6f 76 65 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  oveXX, OP_Next, 
0920: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0930: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0940: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0950: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0960: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0970: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0980: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0990: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
09a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
09b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
09c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
09f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0a00: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0a10: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0a20: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0a30: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0a40: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0a50: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0a60: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0a70: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0a80: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0a90: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
0aa0: 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20 7a    When reaches z
0ab0: 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49 6e  ero, the u1.isIn
0ac0: 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69 65  terrupted.** fie
0ad0: 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ld of the sqlite
0ae0: 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73  3 structure is s
0af0: 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73  et in order to s
0b00: 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74 65  imulate and inte
0b10: 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  rrupt..**.** Thi
0b20: 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75 73  s facility is us
0b30: 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70  ed for testing p
0b40: 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49  urposes only.  I
0b50: 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74  t does not funct
0b60: 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64  ion.** in an ord
0b70: 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a  inary build..*/.
0b80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0b90: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  ST.int sqlite3_i
0ba0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d  nterrupt_count =
0bb0: 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   0;.#endif../*.*
0bc0: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0bd0: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0be0: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0bf0: 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  ype the OP_Sort 
0c00: 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65  opcode.** is exe
0c10: 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73 74  cuted.  The test
0c20: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0c30: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0c40: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0c50: 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73  at.** sorting is
0c60: 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f   occurring or no
0c70: 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20 61  t occurring at a
0c80: 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65 73  ppropriate times
0c90: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0ca0: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0cb0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0cc0: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0cd0: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ce0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0cf0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0d00: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0d10: 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63  t sqlite3_sort_c
0d20: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0d30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  ../*.** The next
0d40: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
0d50: 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69 7a   records the siz
0d60: 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  e of the largest
0d70: 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20   MEM_Blob.** or 
0d80: 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61 73  MEM_Str that has
0d90: 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61 20   been used by a 
0da0: 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54 68  VDBE opcode.  Th
0db0: 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65  e test procedure
0dc0: 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69 6e  s.** use this in
0dd0: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b  formation to mak
0de0: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
0df0: 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69  zero-blob functi
0e00: 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f  onality.** is wo
0e10: 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e  rking correctly.
0e20: 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65     This variable
0e30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0e40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
0e50: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
0e60: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
0e70: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
0e80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0e90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0ea0: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0eb0: 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 76  ze = 0;.static v
0ec0: 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  oid updateMaxBlo
0ed0: 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20  bsize(Mem *p){. 
0ee0: 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26   if( (p->flags &
0ef0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
0f00: 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e  ob))!=0 && p->n>
0f10: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0f20: 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  size ){.    sqli
0f30: 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
0f40: 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23   = p->n;.  }.}.#
0f50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  endif../*.** Tes
0f60: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20  t a register to 
0f70: 73 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64  see if it exceed
0f80: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61  s the current ma
0f90: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0fa0: 0a 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20  .** If it does, 
0fb0: 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d  record the new m
0fc0: 61 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65  aximum blob size
0fd0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0fe0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
0ff0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1000: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1010: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44  ST).# define UPD
1020: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
1030: 28 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c  (P)  updateMaxBl
1040: 6f 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a  obsize(P).#else.
1050: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
1060: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a  MAX_BLOBSIZE(P).
1070: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
1080: 6e 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20  nvert the given 
1090: 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20  register into a 
10a0: 73 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e  string if it isn
10b0: 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64  't one.** alread
10c0: 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  y. Return non-ze
10d0: 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ro if a malloc()
10e0: 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69   fails..*/.#defi
10f0: 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20  ne Stringify(P, 
1100: 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50  enc) \.   if(((P
1110: 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74  )->flags&(MEM_St
1120: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
1130: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
1140: 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63  mStringify(P,enc
1150: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1160: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1170: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1180: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1190: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
11a0: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
11b0: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
11c0: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
11d0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
11e0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
11f0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
1200: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
1210: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
1220: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
1230: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1240: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1250: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1260: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1270: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1280: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1290: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
12a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
12b0: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
12c0: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
12d0: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
12e0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
12f0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
1300: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
1310: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
1320: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
1330: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1340: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1350: 6e 20 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67  n MEM_Dyn string
1360: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65  ..*/.#define Dee
1370: 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c  phemeralize(P) \
1380: 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c  .   if( ((P)->fl
1390: 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  ags&MEM_Ephem)!=
13a0: 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71  0 \.       && sq
13b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
13c0: 57 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20  Writeable(P) ){ 
13d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f  goto no_mem;}../
13e0: 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65  *.** Call sqlite
13f0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
1400: 6f 62 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70  ob() on the supp
1410: 6c 69 65 64 20 76 61 6c 75 65 20 28 74 79 70 65  lied value (type
1420: 20 4d 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72   Mem*).** P if r
1430: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66  equired..*/.#def
1440: 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50  ine ExpandBlob(P
1450: 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  ) (((P)->flags&M
1460: 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33  EM_Zero)?sqlite3
1470: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
1480: 62 28 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  b(P):0)../*.** A
1490: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
14a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
14b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
14c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
14d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
14e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
14f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1500: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1510: 75 65 72 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63  uery..** The sec
1520: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 2c 20 27 64  ond argument, 'd
1530: 62 5f 65 6e 63 27 20 69 73 20 74 68 65 20 74 65  b_enc' is the te
1540: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
1550: 20 62 79 20 74 68 65 20 76 64 62 65 20 66 6f 72   by the vdbe for
1560: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 76 61 72  .** register var
1570: 69 61 62 6c 65 73 2e 20 20 54 68 69 73 20 72 6f  iables.  This ro
1580: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1590: 4d 65 6d 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65  Mem->enc and pMe
15a0: 6d 2d 3e 74 79 70 65 0a 2a 2a 20 76 61 72 69 61  m->type.** varia
15b0: 62 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65  bles used by the
15c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
15d0: 28 29 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  () routines..*/.
15e0: 23 64 65 66 69 6e 65 20 73 74 6f 72 65 54 79 70  #define storeTyp
15f0: 65 49 6e 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72  eInfo(A,B) _stor
1600: 65 54 79 70 65 49 6e 66 6f 28 41 29 0a 73 74 61  eTypeInfo(A).sta
1610: 74 69 63 20 76 6f 69 64 20 5f 73 74 6f 72 65 54  tic void _storeT
1620: 79 70 65 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65  ypeInfo(Mem *pMe
1630: 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20  m){.  int flags 
1640: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20  = pMem->flags;. 
1650: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1660: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65  _Null ){.    pMe
1670: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
1680: 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73  _NULL;.  }.  els
1690: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16a0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65  M_Int ){.    pMe
16b0: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
16c0: 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20  _INTEGER;.  }.  
16d0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
16e0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
16f0: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1700: 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a  LITE_FLOAT;.  }.
1710: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1720: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
1730: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1740: 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65  QLITE_TEXT;.  }e
1750: 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  lse{.    pMem->t
1760: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
1770: 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  B;.  }.}../*.** 
1780: 50 72 6f 70 65 72 74 69 65 73 20 6f 66 20 6f 70  Properties of op
1790: 63 6f 64 65 73 2e 20 20 54 68 65 20 4f 50 46 4c  codes.  The OPFL
17a0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61  G_INITIALIZER ma
17b0: 63 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  cro is.** create
17c0: 64 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61  d by mkopcodeh.a
17d0: 77 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c  wk during compil
17e0: 61 74 69 6f 6e 2e 20 20 44 61 74 61 20 69 73 20  ation.  Data is 
17f0: 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d  obtained.** from
1800: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f   the comments fo
1810: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 22 63 61 73  llowing the "cas
1820: 65 20 4f 50 5f 78 78 78 78 3a 22 20 73 74 61 74  e OP_xxxx:" stat
1830: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69  ements in.** thi
1840: 73 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61  s file.  .*/.sta
1850: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
1860: 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65 50 72  ed char opcodePr
1870: 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47  operty[] = OPFLG
1880: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f  _INITIALIZER;../
1890: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
18a0: 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20 68 61   if an opcode ha
18b0: 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f 50 46  s any of the OPF
18c0: 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74 69 65  LG_xxx propertie
18d0: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
18e0: 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73  y mask..*/.int s
18f0: 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f 64 65  qlite3VdbeOpcode
1900: 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e 74 20  HasProperty(int 
1910: 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b  opcode, int mask
1920: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f 70 63  ){.  assert( opc
1930: 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c  ode>0 && opcode<
1940: 28 69 6e 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f  (int)sizeof(opco
1950: 64 65 50 72 6f 70 65 72 74 79 29 20 29 3b 0a 20  deProperty) );. 
1960: 20 72 65 74 75 72 6e 20 28 6f 70 63 6f 64 65 50   return (opcodeP
1970: 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26  roperty[opcode]&
1980: 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  mask)!=0;.}../*.
1990: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65  ** Allocate Vdbe
19a0: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43  Cursor number iC
19b0: 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ur.  Return a po
19c0: 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65  inter to it.  Re
19d0: 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20  turn NULL.** if 
19e0: 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65  we run out of me
19f0: 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mory..*/.static 
1a00: 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f  VdbeCursor *allo
1a10: 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64  cateCursor(.  Vd
1a20: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
1a30: 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75      /* The virtu
1a40: 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20  al machine */.  
1a50: 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20  int iCur,       
1a60: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1a70: 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75  f the new VdbeCu
1a80: 72 73 6f 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  rsor */.  Op *pO
1a90: 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p,              
1aa0: 2f 2a 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c  /* */.  int iDb,
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ac0: 20 57 68 65 6e 20 64 61 74 61 62 61 73 65 20 74   When database t
1ad0: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1ae0: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1af0: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1b00: 6f 72 20 20 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a  or     /* */.){.
1b10: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
1b20: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
1b30: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
1b40: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
1b50: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
1b60: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
1b70: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1b80: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1b90: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1ba0: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1bb0: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1bc0: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1bd0: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1be0: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1bf0: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1c00: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1c10: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
1c20: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
1c30: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
1c40: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
1c50: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
1c60: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
1c70: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1c80: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1c90: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1ca0: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1cb0: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1cc0: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1cd0: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1ce0: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1cf0: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1d00: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1d10: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
1d20: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1d30: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
1d40: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
1d50: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
1d60: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
1d70: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1d80: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1d90: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1da0: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1db0: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1dc0: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1dd0: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1de0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1df0: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1e00: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1e10: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
1e20: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
1e30: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
1e40: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
1e50: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
1e60: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
1e70: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1e80: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1e90: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1ea0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1eb0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1ec0: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1ed0: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1ee0: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1ef0: 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63 6f 64   /* If the opcod
1f00: 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50 5f 53  e of pOp is OP_S
1f10: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20 74 68  etNumColumns, th
1f20: 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e 74 61  en pOp->p2 conta
1f30: 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  ins.  ** the num
1f40: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1f50: 20 74 68 65 20 72 65 63 6f 72 64 73 20 63 6f 6e   the records con
1f60: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61  tained in the ta
1f70: 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e 64 65  ble or.  ** inde
1f80: 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1f90: 55 73 65 20 74 68 69 73 20 74 6f 20 72 65 73 65  Use this to rese
1fa0: 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 74 68  rve space for th
1fb0: 65 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73  e .  ** VdbeCurs
1fc0: 6f 72 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79  or.aType[] array
1fd0: 2e 0a 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ..  */.  int nFi
1fe0: 65 6c 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  eld = 0;.  if( p
1ff0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2000: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20  etNumColumns || 
2010: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2020: 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b  OpenEphemeral ){
2030: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
2040: 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79  p->p2;.  }.  nBy
2050: 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65  te = .      size
2060: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b  of(VdbeCursor) +
2070: 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65   .      (isBtree
2080: 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74  Cursor?sqlite3Bt
2090: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a  reeCursorSize():
20a0: 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46  0) + .      2*nF
20b0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
20c0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
20d0: 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  r<p->nCursor );.
20e0: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
20f0: 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  Cur] ){.    sqli
2100: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
2110: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
2120: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
2130: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2140: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2150: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2160: 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74  mGrow(pMem, nByt
2170: 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e  e, 0) ){.    p->
2180: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2190: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
21a0: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
21b0: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
21c0: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78   nByte);.    pCx
21d0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
21e0: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
21f0: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e  Field;.    if( n
2200: 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70  Field ){.      p
2210: 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32  Cx->aType = (u32
2220: 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65   *)&pMem->z[size
2230: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b  of(VdbeCursor)];
2240: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
2250: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2260: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2270: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2280: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2290: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
22a0: 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a  ursor)+2*nField*
22b0: 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20  sizeof(u32)];.  
22c0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
22d0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
22e0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
22f0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
2300: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2310: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
2320: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
2330: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2340: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2350: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2360: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2370: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2380: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2390: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
23a0: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
23b0: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
23c0: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73  e it alone..*/.s
23d0: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
23e0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
23f0: 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66  Mem *pRec){.  if
2400: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2410: 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49   (MEM_Real|MEM_I
2420: 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt))==0 ){.    i
2430: 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20  nt realnum;.    
2440: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2450: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2460: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2470: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a  >flags&MEM_Str).
2480: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
2490: 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63  te3IsNumber(pRec
24a0: 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70  ->z, &realnum, p
24b0: 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20  Rec->enc) ){.   
24c0: 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20     i64 value;.  
24d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
24e0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52  hangeEncoding(pR
24f0: 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  ec, SQLITE_UTF8)
2500: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61  ;.      if( !rea
2510: 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41  lnum && sqlite3A
2520: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
2530: 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20  value) ){.      
2540: 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61    pRec->u.i = va
2550: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lue;.        Mem
2560: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2570: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
2580: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2590: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
25a0: 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20  ealify(pRec);.  
25b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
25c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
25d0: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
25e0: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
25f0: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
2600: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
2610: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
2620: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2630: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2640: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2650: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2660: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2670: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2680: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2690: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
26a0: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
26b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
26c0: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
26d0: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
26e0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
26f0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
2700: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
2710: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
2720: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2730: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2740: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2750: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2760: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2770: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2780: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2790: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
27a0: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
27b0: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
27c0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
27d0: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
27e0: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
27f0: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
2800: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
2810: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
2820: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2830: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2840: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2850: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2860: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2870: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2880: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2890: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
28a0: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
28b0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
28c0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
28d0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
28e0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
28f0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
2900: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
2910: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
2920: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2930: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2940: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2950: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2960: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2970: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2980: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2990: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
29a0: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
29b0: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
29c0: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
29d0: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
29e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29f0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
2a00: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
2a10: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2a20: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2a30: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
2a40: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
2a50: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
2a60: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
2a70: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
2a80: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
2a90: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2aa0: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2ab0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2ac0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2ad0: 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  );.    applyNume
2ae0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
2af0: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
2b00: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
2b10: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
2b20: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2b30: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2b40: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2b50: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
2b60: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
2b70: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
2b80: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2b90: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2ba0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2bb0: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2bc0: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2bd0: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2be0: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2bf0: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2c00: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2c10: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2c20: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2c30: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
2c40: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
2c50: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
2c60: 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ument..**.** Thi
2c70: 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45  s is an EXPERIME
2c80: 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20  NTAL api and is 
2c90: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
2ca0: 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f  e or removal..*/
2cb0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2cc0: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2cd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2ce0: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  Val){.  Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2d10: 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20  finity(pMem);.  
2d20: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d  storeTypeInfo(pM
2d30: 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  em, 0);.  return
2d40: 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a   pMem->type;.}..
2d50: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d60: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d70: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d80: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2d90: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2da0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2db0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dc0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2dd0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2de0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2df0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e00: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e10: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e20: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e30: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e40: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2e50: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2e60: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2e70: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2e80: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2e90: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2ea0: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2eb0: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2ec0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2ed0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2ee0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2ef0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2f00: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2f10: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2f20: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2f30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2f40: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2f50: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2f60: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2f70: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2f80: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2f90: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2fa0: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2fb0: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2fc0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2fd0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fe0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2ff0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3000: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3010: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3020: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3030: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3040: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3050: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3060: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3070: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
3080: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3090: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
30a0: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
30b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30c0: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
30d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
30e0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
30f0: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
3100: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3110: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3120: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3130: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3140: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
3150: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3160: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3170: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3180: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3190: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
31c0: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
31d0: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
31e0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
31f0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3200: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
3210: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
3220: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
3230: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
3240: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
3250: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
3260: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
3270: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
3280: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
3290: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
32a0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
32b0: 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73   "]%s", encnames
32c0: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
32d0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
32e0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
32f0: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3300: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
3310: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3320: 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22  100, zCsr,"+%dz"
3330: 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  ,pMem->u.nZero);
3340: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3350: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3360: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3370: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
3380: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3390: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74  M_Str ){.    int
33a0: 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b   j, k;.    zBuf[
33b0: 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66  0] = ' ';.    if
33c0: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
33d0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
33e0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
33f0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3400: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
3410: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3420: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
3430: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  tic ){.      zBu
3440: 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20  f[1] = 't';.    
3450: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3460: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3470: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3480: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3490: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a  Ephem ){.      z
34a0: 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20  Buf[1] = 'e';.  
34b0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
34c0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
34d0: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
34e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42   }else{.      zB
34f0: 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20  uf[1] = 's';.   
3500: 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20   }.    k = 2;.  
3510: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3520: 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d  tf(100, &zBuf[k]
3530: 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29  , "%d", pMem->n)
3540: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3550: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3560: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3570: 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66  ++] = '[';.    f
3580: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20  or(j=0; j<15 && 
3590: 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b  j<pMem->n; j++){
35a0: 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d  .      u8 c = pM
35b0: 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20  em->z[j];.      
35c0: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63  if( c>=0x20 && c
35d0: 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20  <0x7f ){.       
35e0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a   zBuf[k++] = c;.
35f0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3600: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3610: 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20   '.';.      }.  
3620: 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b    }.    zBuf[k++
3630: 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c  ] = ']';.    sql
3640: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3650: 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e  0,&zBuf[k], encn
3660: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3670: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3680: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3690: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
36a0: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23  ++] = 0;.  }.}.#
36b0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
36c0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
36d0: 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65   Print the value
36e0: 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66   of a register f
36f0: 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f  or tracing purpo
3700: 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ses:.*/.static v
3710: 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  oid memTracePrin
3720: 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d  t(FILE *out, Mem
3730: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66   *p){.  if( p->f
3740: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3750: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3760: 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  ut, " NULL");.  
3770: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
3780: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3790: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
37a0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
37b0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
37c0: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
37d0: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
37e0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
37f0: 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  Int ){.    fprin
3800: 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64  tf(out, " i:%lld
3810: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3820: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3830: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3840: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3850: 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a  " r:%g", p->r);.
3860: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61    }else{.    cha
3870: 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20  r zBuf[200];.   
3880: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
3890: 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42  rettyPrint(p, zB
38a0: 75 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66  uf);.    fprintf
38b0: 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20  (out, " ");.    
38c0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  fprintf(out, "%s
38d0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
38e0: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
38f0: 73 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a  sterTrace(FILE *
3900: 6f 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d  out, int iReg, M
3910: 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74  em *p){.  fprint
3920: 66 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20  f(out, "REG[%d] 
3930: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3940: 6d 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c  mTracePrint(out,
3950: 20 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f   p);.  fprintf(o
3960: 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ut, "\n");.}.#en
3970: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3980: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3990: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
39a0: 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61  E(R,M) if(p->tra
39b0: 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65  ce)registerTrace
39c0: 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23  (p->trace,R,M).#
39d0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52  else.#  define R
39e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
39f0: 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64  M).#endif...#ifd
3a00: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
3a10: 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68  ./* .** hwtime.h
3a20: 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65   contains inline
3a30: 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20   assembler code 
3a40: 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  for implementing
3a50: 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72   .** high-perfor
3a60: 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75  mance timing rou
3a70: 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  tines..*/.#inclu
3a80: 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23  de "hwtime.h"..#
3a90: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3aa0: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
3ab0: 52 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e  RUPT macro defin
3ac0: 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f  ed here looks to
3ad0: 20 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73   see if the.** s
3ae0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
3af0: 28 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62  () routine has b
3b00: 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20  een called.  If 
3b10: 69 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65  it has been, the
3b20: 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20  n.** processing 
3b30: 6f 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  of the VDBE prog
3b40: 72 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74  ram is interrupt
3b50: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d  ed..**.** This m
3b60: 61 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76  acro added to ev
3b70: 65 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ery instruction 
3b80: 74 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70  that does a jump
3b90: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
3ba0: 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70  implement a loop
3bb0: 2e 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65  .  This test use
3bc0: 64 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79  d to be on every
3bd0: 20 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74   single instruct
3be0: 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74  ion,.** but that
3bf0: 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74   meant we more t
3c00: 65 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e  esting that we n
3c10: 65 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20  eeded.  By only 
3c20: 74 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66  testing the.** f
3c30: 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74  lag on jump inst
3c40: 72 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74  ructions, we get
3c50: 20 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64   a (small) speed
3c60: 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f   improvement..*/
3c70: 0a 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46  .#define CHECK_F
3c80: 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20  OR_INTERRUPT \. 
3c90: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
3ca0: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
3cb0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
3cc0: 6e 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65  nterrupt;..#ifde
3cd0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73  f SQLITE_DEBUG.s
3ce0: 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78  tatic int fileEx
3cf0: 69 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62  ists(sqlite3 *db
3d00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
3d10: 69 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20  ile){.  int res 
3d20: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  = 0;.  int rc = 
3d30: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65  SQLITE_OK;.#ifde
3d40: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
3d50: 2f 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72  /* If we are cur
3d60: 72 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49  rently testing I
3d70: 4f 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64  O errors, then d
3d80: 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63  o not call OsAcc
3d90: 65 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65  ess() to.  ** te
3da0: 73 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65  st for the prese
3db0: 6e 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68  nce of zFile. Th
3dc0: 69 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e  is is because an
3dd0: 79 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a  y IO error that.
3de0: 20 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65    ** occurs here
3df0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70   will not be rep
3e00: 6f 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74  orted, causing t
3e10: 68 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e  he test to fail.
3e20: 0a 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69  .  */.  extern i
3e30: 6e 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72  nt sqlite3_io_er
3e40: 72 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69  ror_pending;.  i
3e50: 66 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72  f( sqlite3_io_er
3e60: 72 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29  ror_pending<=0 )
3e70: 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d  .#endif.    rc =
3e80: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
3e90: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65  (db->pVfs, zFile
3ea0: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
3eb0: 45 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20  EXISTS, &res);. 
3ec0: 20 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20   return (res && 
3ed0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a  rc==SQLITE_OK);.
3ee0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
3ef0: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3f00: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3f10: 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e  m as we can then
3f20: 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73   return..**.** s
3f30: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
3f40: 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61  ady() must be ca
3f50: 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73  lled before this
3f60: 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
3f70: 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68  r to.** close th
3f80: 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61  e program with a
3f90: 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61   final OP_Halt a
3fa0: 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65  nd to set up the
3fb0: 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e   callbacks.** an
3fc0: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
3fd0: 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a  age pointer..**.
3fe0: 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f  ** Whenever a ro
3ff0: 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61  w or result data
4000: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74   is available, t
4010: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
4020: 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b   either.** invok
4030: 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c  e the result cal
4040: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4050: 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72  is one) or retur
4060: 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  n with.** SQLITE
4070: 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  _ROW..**.** If a
4080: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
4090: 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b  e to open a lock
40a0: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
40b0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
40c0: 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e  * will either in
40d0: 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61  voke the busy ca
40e0: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
40f0: 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77   is one) or it w
4100: 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51  ill.** return SQ
4110: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
4120: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
4130: 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65  urs, an error me
4140: 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e  ssage is written
4150: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
4160: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ned.** from sqli
4170: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
4180: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d   p->zErrMsg is m
4190: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
41a0: 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20  that memory..** 
41b0: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  The error code i
41c0: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72  s stored in p->r
41d0: 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  c and this routi
41e0: 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ne returns SQLIT
41f0: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49  E_ERROR..**.** I
4200: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65  f the callback e
4210: 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ver returns non-
4220: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70  zero, then the p
4230: 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20  rogram exits.** 
4240: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
4250: 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65  ere will be no e
4260: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74  rror message but
4270: 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64   the p->rc field
4280: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51   is.** set to SQ
4290: 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74  LITE_ABORT and t
42a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
42b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
42c0: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65  RROR..**.** A me
42d0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
42e0: 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e  error causes p->
42f0: 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20  rc to be set to 
4300: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64  SQLITE_NOMEM and
4310: 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65   this.** routine
4320: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
4330: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f  E_ERROR..**.** O
4340: 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72  ther fatal error
4350: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
4360: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  ERROR..**.** Aft
4370: 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  er this routine 
4380: 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71  has finished, sq
4390: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
43a0: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  e() should be.**
43b0: 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75   used to clean u
43c0: 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20  p the mess that 
43d0: 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e  was left behind.
43e0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
43f0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4400: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4410: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4420: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
4430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4440: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
4450: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
4460: 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20   Op *pOp;       
4470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4480: 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e  urrent operation
4490: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   */.  int rc = S
44a0: 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20  QLITE_OK;       
44b0: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
44c0: 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  urn */.  sqlite3
44d0: 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20   *db = p->db;   
44e0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
44f0: 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ase */.  u8 enco
4500: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
4510: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
4520: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4530: 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b    Mem *pIn1 = 0;
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4550: 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  1st input operan
4560: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32  d */.  Mem *pIn2
4570: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4580: 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f    /* 2nd input o
4590: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
45a0: 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20  *pIn3 = 0;      
45b0: 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e         /* 3rd in
45c0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
45d0: 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20   Mem *pOut = 0; 
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
45f0: 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  utput operand */
4600: 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79  .  u8 opProperty
4610: 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  ;.  int iCompare
4620: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4630: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
4640: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
4650: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a  ation */.  int *
4660: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
4670: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 61 74        /* Permuat
4680: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
4690: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
46a0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
46b0: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
46c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
46d0: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
46e0: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
46f0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
4700: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
4710: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
4720: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
4730: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4740: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4750: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4760: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4770: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4780: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
4790: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
47a0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
47b0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
47c0: 66 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  f.  UnpackedReco
47d0: 72 64 20 61 54 65 6d 70 52 65 63 5b 31 36 5d 3b  rd aTempRec[16];
47e0: 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
47f0: 64 20 61 20 74 72 61 6e 73 69 65 6e 74 20 55 6e  d a transient Un
4800: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 2f 0a  packedRecord */.
4810: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4820: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4830: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4840: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4850: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73 73  es this */.  ass
4860: 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d  ert( db->magic==
4870: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
4880: 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  Y );.  sqlite3Bt
4890: 72 65 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74  reeMutexArrayEnt
48a0: 65 72 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a  er(&p->aMutex);.
48b0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
48c0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
48d0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
48e0: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
48f0: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4900: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4910: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4920: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4930: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4940: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4950: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4960: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4970: 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51  _OK || p->rc==SQ
4980: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70  LITE_BUSY );.  p
4990: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
49a0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
49b0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
49c0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
49d0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
49e0: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
49f0: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
4a00: 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56  RUPT;.  sqlite3V
4a10: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4a20: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
4a30: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
4a40: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4a50: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4a60: 3d 30 20 0a 20 20 20 26 26 20 28 28 70 2d 3e 64  =0 .   && ((p->d
4a70: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4a80: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 20 7c  E_VdbeListing) |
4a90: 7c 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  | fileExists(db,
4aa0: 20 22 76 64 62 65 5f 65 78 70 6c 61 69 6e 22 29   "vdbe_explain")
4ab0: 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ).  ){.    int i
4ac0: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44  ;.    printf("VD
4ad0: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4ae0: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c  ng:\n");.    sql
4af0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4b00: 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  (p);.    for(i=0
4b10: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4b20: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
4b30: 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
4b40: 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d  t, i, &p->aOp[i]
4b50: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
4b60: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4b70: 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20  , "vdbe_trace") 
4b80: 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20  ){.    p->trace 
4b90: 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20  = stdout;.  }.  
4ba0: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4bb0: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4bc0: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4bd0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4be0: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4bf0: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4c00: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4c10: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4c20: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4c30: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4c40: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4c50: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4c60: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4c70: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f  );.#endif.    pO
4c80: 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b  p = &p->aOp[pc];
4c90: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
4ca0: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
4cb0: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
4cc0: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
4cd0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4ce0: 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
4cf0: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
4d00: 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   pc==0 ){.      
4d10: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 45    printf("VDBE E
4d20: 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c  xecution Trace:\
4d30: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  n");.        sql
4d40: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4d50: 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (p);.      }.   
4d60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4d70: 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20  intOp(p->trace, 
4d80: 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a  pc, pOp);.    }.
4d90: 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
4da0: 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a  ==0 && pc==0 ){.
4db0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
4dc0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4dd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 66 69 6c 65  ;.      if( file
4de0: 45 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65  Exists(db, "vdbe
4df0: 5f 73 71 6c 74 72 61 63 65 22 29 20 29 7b 0a 20  _sqltrace") ){. 
4e00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4e10: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4e20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
4e30: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
4e40: 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  loc();.    }.#en
4e50: 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20  dif.      ..    
4e60: 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  /* Check to see 
4e70: 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69  if we need to si
4e80: 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72  mulate an interr
4e90: 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  upt.  This only 
4ea0: 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69  happens.    ** i
4eb0: 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63  f we have a spec
4ec0: 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a  ial test build..
4ed0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4ee0: 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66  LITE_TEST.    if
4ef0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4f00: 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20  upt_count>0 ){. 
4f10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
4f20: 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a  errupt_count--;.
4f30: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4f40: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4f50: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
4f60: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4f70: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
4f80: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66     }.#endif..#if
4f90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4fa0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4fb0: 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74  CK.    /* Call t
4fc0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4fd0: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
4fe0: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
4ff0: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
5000: 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20  .    ** of VDBE 
5010: 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78  ops have been ex
5020: 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73  ecuted (either s
5030: 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61  ince this invoca
5040: 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73  tion of.    ** s
5050: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29  qlite3VdbeExec()
5060: 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74   or since last t
5070: 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73  ime the progress
5080: 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61   callback was ca
5090: 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66  lled)..    ** If
50a0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
50b0: 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e  llback returns n
50c0: 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68  on-zero, exit th
50d0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
50e0: 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20  e with.    ** a 
50f0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
5100: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f  TE_ABORT..    */
5110: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
5120: 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20  ogress ){.      
5130: 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  if( db->nProgres
5140: 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f  sOps==nProgressO
5150: 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  ps ){.        in
5160: 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20 69  t prc;.        i
5170: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5180: 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
5190: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
51a0: 73 65 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20  se;.        prc 
51b0: 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64  =db->xProgress(d
51c0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
51d0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
51e0: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
51f0: 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
5200: 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
5210: 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30        if( prc!=0
5220: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
5230: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
5240: 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67  UPT;.          g
5250: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
5260: 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  alt;.        }. 
5270: 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73         nProgress
5280: 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Ops = 0;.      }
5290: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
52a0: 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  Ops++;.    }.#en
52b0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 63  dif..    /* Do c
52c0: 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f 63  ommon setup proc
52d0: 65 73 73 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f  essing for any o
52e0: 70 63 6f 64 65 20 74 68 61 74 20 69 73 20 6d 61  pcode that is ma
52f0: 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69 74 68  rked.    ** with
5300: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
5310: 6c 65 61 73 65 22 20 74 61 67 2e 20 20 53 75 63  lease" tag.  Suc
5320: 68 20 6f 70 63 6f 64 65 73 20 68 61 76 65 20 61  h opcodes have a
5330: 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f   single.    ** o
5340: 75 74 70 75 74 20 77 68 69 63 68 20 69 73 20 73  utput which is s
5350: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
5360: 50 32 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54  P2 parameter.  T
5370: 68 65 20 50 32 20 72 65 67 69 73 74 65 72 0a 20  he P2 register. 
5380: 20 20 20 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c     ** is initial
5390: 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a  ized to a NULL..
53a0: 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f      */.    opPro
53b0: 70 65 72 74 79 20 3d 20 6f 70 63 6f 64 65 50 72  perty = opcodePr
53c0: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
53d0: 64 65 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f 70  de];.    if( (op
53e0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
53f0: 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
5400: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5410: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5420: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5430: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5440: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5450: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5460: 70 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  p2];.      sqlit
5470: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
5480: 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a  External(pOut);.
5490: 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
54a0: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
54b0: 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20 2f 2a    }else. .    /*
54c0: 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70   Do common setup
54d0: 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d 61 72   for opcodes mar
54e0: 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f 66 20  ked with one of 
54f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 20  the following.  
5500: 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69 6f 6e    ** combination
5510: 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 2e  s of properties.
5520: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20  .    **.    **  
5530: 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20 20 20           in1.   
5540: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e   **           in
5550: 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20 20 20  1 in2.    **    
5560: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 20 6f         in1 in2 o
5570: 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  ut3.    **      
5580: 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20 20 20       in1 in3.   
5590: 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72 69 61   **.    ** Varia
55a0: 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e 32 2c  bles pIn1, pIn2,
55b0: 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20 6d 61   and pIn3 are ma
55c0: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61  de to point to a
55d0: 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20 20 2a  ppropriate.    *
55e0: 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  * registers for 
55f0: 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61 62 6c  inputs.  Variabl
5600: 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20 74 6f  e pOut points to
5610: 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
5620: 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ster..    */.   
5630: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5640: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5650: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5660: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5670: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5680: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
5690: 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20 26 70  .      pIn1 = &p
56a0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
56b0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
56c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
56d0: 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  In1);.      if( 
56e0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
56f0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5700: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5710: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5720: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5730: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
5740: 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d 20 26          pIn2 = &
5750: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
5760: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5770: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5780: 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20  , pIn2);.       
5790: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
57a0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
57b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  0 ){.          a
57c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
57d0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73   );.          as
57e0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
57f0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5800: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
5810: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
5820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
5830: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5840: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5850: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5860: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5870: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5880: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5890: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
58a0: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
58b0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
58c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
58d0: 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b  (pOp->p3, pIn3);
58e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
58f0: 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72  se if( (opProper
5900: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  ty & OPFLG_IN2)!
5910: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5920: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5930: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5940: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5950: 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20 3d 20  );.      pIn2 = 
5960: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
5970: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5980: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5990: 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
59a0: 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74  e if( (opPropert
59b0: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
59c0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
59d0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
59e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59f0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5a00: 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26  ;.      pIn3 = &
5a10: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5a20: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
5a30: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5a40: 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  pIn3);.    }..  
5a50: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5a60: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5ac0: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5ad0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5ae0: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5af0: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5b00: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5b10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5b20: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5b30: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5b40: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5b50: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5b60: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5b70: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5b80: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5b90: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5ba0: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5bb0: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5bc0: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5bd0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5be0: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5bf0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5c00: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5c10: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5c20: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5c30: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5c40: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5c50: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5c60: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5c70: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5c80: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5c90: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5ca0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5cb0: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5cc0: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5cd0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5ce0: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5cf0: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5d00: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5d10: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5d20: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5d30: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5d40: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5d50: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5d60: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5d70: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5d80: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5d90: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5da0: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5db0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5dc0: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5dd0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5de0: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5df0: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5e00: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5e10: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5e20: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
5e30: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
5e40: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
5e50: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
5e60: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
5e70: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
5e80: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
5e90: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
5ea0: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
5eb0: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
5ec0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
5ed0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
5ee0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
5ef0: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
5f00: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
5f10: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
5f20: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
5f30: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
5f40: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
5f50: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
5f60: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
5f70: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
5f80: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
5f90: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
5fa0: 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72  , in3, out2_prer
5fb0: 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75  elease, out2, ou
5fc0: 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20  t3.  See.** the 
5fd0: 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63  mkopcodeh.awk sc
5fe0: 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f  ript for additio
5ff0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
6000: 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61  .**.** Documenta
6010: 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20  tion about VDBE 
6020: 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72  opcodes is gener
6030: 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67  ated by scanning
6040: 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f   this file.** fo
6050: 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20  r lines of that 
6060: 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a  contain "Opcode:
6070: 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e  ".  That line an
6080: 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  d all subsequent
6090: 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65  .** comment line
60a0: 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68  s are used in th
60b0: 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
60c0: 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20  the opcode.html 
60d0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a  documentation.**
60e0: 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d   file..**.** SUM
60f0: 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  MARY:.**.**     
6100: 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d  Formatting is im
6110: 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70  portant to scrip
6120: 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69  ts that scan thi
6130: 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44  s file..**     D
6140: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
6150: 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e  om the formattin
6160: 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c  g style currentl
6170: 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a  y in use..**.***
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20  **********/../* 
61d0: 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20  Opcode:  Goto * 
61e0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
61f0: 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  n unconditional 
6200: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6210: 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  P2..** The next 
6220: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63  instruction exec
6230: 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a  uted will be .**
6240: 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65   the one at inde
6250: 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65  x P2 from the be
6260: 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68  ginning of.** th
6270: 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61  e program..*/.ca
6280: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
6290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
62a0: 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52  p */.  CHECK_FOR
62b0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63  _INTERRUPT;.  pc
62c0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
62d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
62e0: 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31  pcode:  Gosub P1
62f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6300: 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
6310: 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72  t address onto r
6320: 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e  egister P1.** an
6330: 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61  d then jump to a
6340: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61  ddress P2..*/.ca
6350: 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20  se OP_Gosub: {  
6360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
6370: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6380: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
6390: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
63a0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
63b0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
63c0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
63d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
63e0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
63f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6400: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6410: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6420: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6430: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6440: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
6450: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6460: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6470: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
6480: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
6490: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
64a0: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
64b0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
64c0: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
64d0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
64e0: 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
64f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6500: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
6510: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6530: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
6540: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53   * * * *.**.** S
6550: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
6560: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
6570: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6580: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
6590: 50 5f 59 69 65 6c 64 3a 20 7b 0a 20 20 69 6e 74  P_Yield: {.  int
65a0: 20 70 63 44 65 73 74 3b 0a 20 20 61 73 73 65 72   pcDest;.  asser
65b0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
65c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
65d0: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
65e0: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
65f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6600: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6610: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6620: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6630: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44  = MEM_Int;.  pcD
6640: 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d  est = (int)pIn1-
6650: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  >u.i;.  pIn1->u.
6660: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6670: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6680: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
6690: 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b  pcDest;.  break;
66a0: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
66b0: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
66c0: 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d   *.**.** Exit im
66d0: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
66e0: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
66f0: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
6700: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
6710: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
6720: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
6730: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
6740: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
6750: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
6760: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6770: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
6780: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
6790: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
67a0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
67b0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
67c0: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
67d0: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
67e0: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
67f0: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
6800: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
6810: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
6820: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
6830: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
6840: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
6850: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
6860: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
6870: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
6880: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
6890: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
68a0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
68b0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
68c0: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
68d0: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
68e0: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
68f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
6900: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
6910: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
6920: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
6930: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54   string..**.** T
6940: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
6950: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
6960: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
6970: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
6980: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
6990: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
69a0: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
69b0: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
69c0: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
69d0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
69e0: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
69f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
6a00: 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70   {.  p->rc = pOp
6a10: 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ->p1;.  p->pc = 
6a20: 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  pc;.  p->errorAc
6a30: 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  tion = pOp->p2;.
6a40: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6a50: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
6a60: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6a70: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
6a80: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20  Op->p4.z);.  }. 
6a90: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
6aa0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
6ab0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
6ac0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
6ad0: 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63  E_OK );.  if( rc
6ae0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
6af0: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20  .    p->rc = rc 
6b00: 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
6b10: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
6b20: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
6b30: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
6b40: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
6b50: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
6b60: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
6b70: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
6b80: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
6b90: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
6ba0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
6bb0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6bc0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
6bd0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
6be0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
6bf0: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
6c00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75  = MEM_Int;.  pOu
6c10: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
6c20: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6c30: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
6c40: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6c50: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
6c60: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
6c70: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
6c80: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
6c90: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
6ca0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
6cb0: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
6cc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
6cd0: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
6ce0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
6cf0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
6d00: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f   = MEM_Int;.  pO
6d10: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
6d20: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
6d30: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6d40: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
6d50: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6d60: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6d70: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
6d80: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
6d90: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
6da0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
6db0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
6dc0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6dd0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
6de0: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
6df0: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
6e00: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
6e10: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
6e20: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
6e30: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
6e40: 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  ->r = *pOp->p4.p
6e50: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
6e60: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
6e70: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
6e80: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
6e90: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
6ea0: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
6eb0: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
6ec0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
6ed0: 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72  * into an OP_Str
6ee0: 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73  ing before it is
6ef0: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
6f00: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f  e first time..*/
6f10: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
6f20: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
6f30: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
6f40: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
6f50: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
6f60: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
6f70: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
6f80: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
6f90: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
6fa0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
6fb0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
6fc0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
6fd0: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
6fe0: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
6ff0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7000: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7010: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7020: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7030: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 53  ATIC);.    if( S
7040: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
7050: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
7060: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
7070: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
7080: 6d 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  m;.    if( SQLIT
7090: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
70a0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
70b0: 65 28 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 6e  e(pOut) ) goto n
70c0: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 4f 75 74 2d  o_mem;.    pOut-
70d0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
70e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
70f0: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7100: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
7110: 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66  ~MEM_Dyn;.    if
7120: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
7130: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
7140: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
7150: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
7160: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
7170: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
7180: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
7190: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
71a0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
71b0: 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  ->n;.    if( pOp
71c0: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
71d0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
71e0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
71f0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
7200: 7d 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58  }.    UPDATE_MAX
7210: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7220: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7230: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
7240: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
7250: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
7260: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
7270: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
7280: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7290: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
72a0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
72b0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
72c0: 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34  tring P1 P2 * P4
72d0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72   *.**.** The str
72e0: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
72f0: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
7300: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
7310: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7320: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
7330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7340: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7350: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7360: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
7370: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
7380: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
7390: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
73a0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
73b0: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
73c0: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
73d0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
73e0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
73f0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7400: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
7410: 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  ull * P2 * * *.*
7420: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c  *.** Write a NUL
7430: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
7440: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
7450: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
7460: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7470: 61 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a  ase */.  break;.
7480: 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  }.../* Opcode: B
7490: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a  lob P1 P2 * P4.*
74a0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
74b0: 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61  o a blob of data
74c0: 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20   P1 bytes long. 
74d0: 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62   Store this.** b
74e0: 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
74f0: 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  P2. This instruc
7500: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65  tion is not code
7510: 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79  d directly.** by
7520: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49   the compiler. I
7530: 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70  nstead, the comp
7540: 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63 69  iler layer speci
7550: 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65  fies.** an OP_He
7560: 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69  xBlob opcode, wi
7570: 74 68 20 74 68 65 20 68 65 78 20 73 74 72 69 6e  th the hex strin
7580: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
7590: 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20   of.** the blob 
75a0: 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f  as P4. This opco
75b0: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
75c0: 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a  d to an OP_Blob.
75d0: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  ** the first tim
75e0: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
75f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
7600: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
7610: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7620: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7630: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
7640: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
7650: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
7660: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
7670: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
7680: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
7690: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
76a0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
76b0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
76c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
76d0: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
76e0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
76f0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
7700: 76 61 72 69 61 62 6c 65 20 50 31 20 69 73 20 77  variable P1 is w
7710: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
7720: 73 74 65 72 20 50 32 2e 20 41 20 76 61 72 69 61  ster P2. A varia
7730: 62 6c 65 20 69 73 0a 2a 2a 20 61 6e 20 75 6e 6b  ble is.** an unk
7740: 6e 6f 77 6e 20 69 6e 20 74 68 65 20 6f 72 69 67  nown in the orig
7750: 69 6e 61 6c 20 53 51 4c 20 73 74 72 69 6e 67 20  inal SQL string 
7760: 61 73 20 68 61 6e 64 65 64 20 74 6f 20 73 71 6c  as handed to sql
7770: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 2e 0a  ite3_compile()..
7780: 2a 2a 20 41 6e 79 20 6f 63 63 75 72 72 65 6e 63  ** Any occurrenc
7790: 65 20 6f 66 20 74 68 65 20 27 3f 27 20 63 68 61  e of the '?' cha
77a0: 72 61 63 74 65 72 20 69 6e 20 74 68 65 20 6f 72  racter in the or
77b0: 69 67 69 6e 61 6c 20 53 51 4c 20 69 73 20 63 6f  iginal SQL is co
77c0: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 61 20 76 61  nsidered.** a va
77d0: 72 69 61 62 6c 65 2e 20 20 56 61 72 69 61 62 6c  riable.  Variabl
77e0: 65 73 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74  es in the SQL st
77f0: 72 69 6e 67 20 61 72 65 20 6e 75 6d 62 65 72 20  ring are number 
7800: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a 2a 2a 20  from left to.** 
7810: 72 69 67 68 74 20 62 65 67 69 6e 6e 69 6e 67 20  right beginning 
7820: 77 69 74 68 20 31 2e 20 20 54 68 65 20 76 61 6c  with 1.  The val
7830: 75 65 73 20 6f 66 20 76 61 72 69 61 62 6c 65 73  ues of variables
7840: 20 61 72 65 20 73 65 74 20 75 73 69 6e 67 20 74   are set using t
7850: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69  he.** sqlite3_bi
7860: 6e 64 28 29 20 41 50 49 2e 0a 2a 2f 0a 63 61 73  nd() API..*/.cas
7870: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
7880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7890: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
78a0: 0a 20 20 69 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e  .  int j = pOp->
78b0: 70 31 20 2d 20 31 3b 0a 20 20 4d 65 6d 20 2a 70  p1 - 1;.  Mem *p
78c0: 56 61 72 3b 0a 20 20 61 73 73 65 72 74 28 20 6a  Var;.  assert( j
78d0: 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e 56 61 72  >=0 && j<p->nVar
78e0: 20 29 3b 0a 0a 20 20 70 56 61 72 20 3d 20 26 70   );..  pVar = &p
78f0: 2d 3e 61 56 61 72 5b 6a 5d 3b 0a 20 20 69 66 28  ->aVar[j];.  if(
7900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
7910: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
7920: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7930: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
7940: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
7950: 28 70 4f 75 74 2c 20 26 70 2d 3e 61 56 61 72 5b  (pOut, &p->aVar[
7960: 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  j], MEM_Static);
7970: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7980: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7990: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
79a0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
79b0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P3 * *.**.** Mov
79c0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
79d0: 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b  register P1..P1+
79e0: 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a  P3-1 over into.*
79f0: 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  * registers P2..
7a00: 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74  P2+P3-1.  Regist
7a10: 65 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20  ers P1..P1+P1-1 
7a20: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
7a30: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
7a40: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
7a50: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
7a60: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  ** P1..P1+P3-1 a
7a70: 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74  nd P2..P2+P3-1 t
7a80: 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61  o overlap..*/.ca
7a90: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
7aa0: 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a 20  char *zMalloc;. 
7ab0: 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33   int n = pOp->p3
7ac0: 3b 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70  ;.  int p1 = pOp
7ad0: 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d  ->p1;.  int p2 =
7ae0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
7af0: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
7b00: 65 72 74 28 20 70 31 3e 30 20 29 3b 0a 20 20 61  ert( p1>0 );.  a
7b10: 73 73 65 72 74 28 20 70 31 2b 6e 3c 70 2d 3e 6e  ssert( p1+n<p->n
7b20: 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  Mem );.  pIn1 = 
7b30: 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20  &p->aMem[p1];.  
7b40: 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
7b50: 20 20 61 73 73 65 72 74 28 20 70 32 2b 6e 3c 70    assert( p2+n<p
7b60: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
7b70: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b   = &p->aMem[p2];
7b80: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7b90: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
7ba0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  );.  while( n-- 
7bb0: 29 7b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  ){.    zMalloc =
7bc0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
7bd0: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7be0: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
7bf0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
7c00: 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70  ut, pIn1);.    p
7c10: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
7c20: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
7c30: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
7c40: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
7c50: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
7c60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
7c70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
7c80: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7c90: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
7ca0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
7cb0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7cc0: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
7cd0: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
7ce0: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
7cf0: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
7d00: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
7d10: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
7d20: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
7d30: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
7d40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
7d50: 79 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  y: {.  assert( p
7d60: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
7d70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
7d80: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
7d90: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
7da0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7db0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
7dc0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
7dd0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
7de0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
7df0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
7e00: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
7e10: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7e20: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7e30: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
7e40: 29 3b 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c  );.  Deephemeral
7e50: 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  ize(pOut);.  REG
7e60: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
7e70: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
7e80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7e90: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
7ea0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
7eb0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
7ec0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
7ed0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7ee0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
7ef0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
7f00: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
7f10: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
7f20: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
7f30: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
7f40: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
7f50: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
7f60: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
7f70: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
7f80: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
7f90: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
7fa0: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
7fb0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
7fc0: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
7fd0: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
7fe0: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
7ff0: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
8000: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
8010: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
8020: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
8030: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
8040: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
8050: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
8060: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
8070: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
8080: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
8090: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
80a0: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
80b0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
80c0: 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  em );.  pIn1 = &
80d0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
80e0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
80f0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
8100: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8110: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
8120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
8130: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
8140: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
8150: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
8160: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8170: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8180: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
8190: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
81a0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
81b0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
81c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
81d0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
81e0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
81f0: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
8200: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
8210: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
8220: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
8230: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
8240: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
8250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
8260: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
8270: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
8280: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
8290: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
82a0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
82b0: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
82c0: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
82d0: 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20  s to the top P1 
82e0: 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65  values as the re
82f0: 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a  sult.** row..*/.
8300: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
8310: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
8320: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
8330: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
8340: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
8350: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8360: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8370: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
8380: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a 20 20 2f  =p->nMem );..  /
8390: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
83a0: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
83b0: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
83c0: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
83d0: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
83e0: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
83f0: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
8400: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
8410: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
8420: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
8430: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
8440: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
8450: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
8460: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
8470: 2a 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74  * as side effect
8480: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
8490: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
84a0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
84b0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
84c0: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
84d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
84e0: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
84f0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f  Mem[i]);.    sto
8500: 72 65 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d  reTypeInfo(&pMem
8510: 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  [i], encoding);.
8520: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
8530: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
8540: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
8550: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
8560: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
8570: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
8580: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
8590: 20 20 70 2d 3e 6e 43 61 6c 6c 62 61 63 6b 2b 2b    p->nCallback++
85a0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  ;.  p->pc = pc +
85b0: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
85c0: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
85d0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
85e0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
85f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8600: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
8610: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
8620: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
8630: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
8640: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
8650: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8660: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8670: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
8680: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
8690: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
86a0: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
86b0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
86c0: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
86d0: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
86e0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
86f0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
8700: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
8710: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
8720: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
8730: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
8740: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
8750: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
8760: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
8770: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
8780: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
8790: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
87a0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
87b0: 42 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  Byte;..  assert(
87c0: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
87d0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
87e0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
87f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
8800: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8810: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
8820: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
8830: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
8840: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
8850: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
8860: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
8870: 32 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  2);.  Stringify(
8880: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
8890: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
88a0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
88b0: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
88c0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
88d0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
88e0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
88f0: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
8900: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74  lag(pOut, MEM_St
8910: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
8920: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
8930: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
8940: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
8950: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
8960: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21  .  }.  if( pOut!
8970: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
8980: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
8990: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
89a0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
89b0: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
89c0: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
89d0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
89e0: 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  te] = 0;.  pOut-
89f0: 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b  >z[nByte+1] = 0;
8a00: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c  .  pOut->flags |
8a10: 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  = MEM_Term;.  pO
8a20: 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
8a30: 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  te;.  pOut->enc 
8a40: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8a50: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8a60: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
8a70: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8a80: 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Add P1 P2 P3 * *
8a90: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
8aa0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8ab0: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
8ac0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
8ad0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
8ae0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
8af0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
8b00: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
8b10: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
8b20: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
8b30: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
8b40: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8b50: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
8b60: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8b70: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
8b80: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8b90: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
8ba0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
8bb0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
8bc0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
8bd0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
8be0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
8bf0: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
8c00: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
8c10: 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68  *.** Subtract th
8c20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8c30: 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20  ter P1 from the 
8c40: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8c50: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
8c60: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8c70: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
8c80: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
8c90: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8ca0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
8cb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64  /* Opcode: Divid
8cc0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
8cd0: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
8ce0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8cf0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
8d00: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
8d10: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
8d20: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
8d30: 73 74 65 72 20 50 33 2e 20 20 49 66 20 74 68 65  ster P3.  If the
8d40: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8d50: 65 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65 72 6f  er P2.** is zero
8d60: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
8d70: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
8d80: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
8d90: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
8da0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
8db0: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
8dc0: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
8dd0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
8de0: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
8df0: 72 20 69 6e 74 65 67 65 72 20 64 69 76 69 73 69  r integer divisi
8e00: 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20  on of the value 
8e10: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
8e20: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
8e30: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
8e40: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
8e50: 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66  lt in P3. .** If
8e60: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8e70: 67 69 73 74 65 72 20 50 32 20 69 73 20 7a 65 72  gister P2 is zer
8e80: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
8e90: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
8ea0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
8eb0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
8ec0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
8ed0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
8ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8ef0: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
8f00: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
8f10: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
8f20: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
8f30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
8f40: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
8f50: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
8f60: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
8f70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8f80: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
8f90: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
8fa0: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
8fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8fc0: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
8fd0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
8fe0: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
8ff0: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
9000: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
9010: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
9020: 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  3 */.  int flags
9030: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
9040: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a  Affinity(pIn1);.
9050: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9060: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9070: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
9080: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
9090: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
90a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
90b0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
90c0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
90d0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
90e0: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
90f0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
9100: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 36 34  M_Int ){.    i64
9110: 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20 70   a, b;.    a = p
9120: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 20  In1->u.i;.    b 
9130: 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
9140: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
9150: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
9160: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
9170: 20 20 20 62 20 2b 3d 20 61 3b 20 20 20 20 20 20     b += a;      
9180: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9190: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
91a0: 20 20 20 62 20 2d 3d 20 61 3b 20 20 20 20 20 20     b -= a;      
91b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
91c0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
91d0: 20 20 20 62 20 2a 3d 20 61 3b 20 20 20 20 20 20     b *= a;      
91e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
91f0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9200: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30          if( a==0
9210: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9220: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9230: 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69  l;.        /* Di
9240: 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72 67 65  viding the large
9250: 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65 67 61  st possible nega
9260: 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e 74 65  tive 64-bit inte
9270: 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79 20 0a  ger (1<<63) by .
9280: 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20 72 65          ** -1 re
9290: 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  turns an integer
92a0: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 74   too large to st
92b0: 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69 74 20  ore in a 64-bit 
92c0: 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a 20 20  data-type. On.  
92d0: 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20 61 72        ** some ar
92e0: 63 68 69 74 65 63 74 75 72 65 73 2c 20 74 68 65  chitectures, the
92f0: 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f 77 73   value overflows
9300: 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f 6e 20   to (1<<63). On 
9310: 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20 20 20  others,.        
9320: 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73 20 69  ** a SIGFPE is i
9330: 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  ssued. The follo
9340: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 6e  wing statement n
9350: 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73 0a 20  ormalizes this. 
9360: 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61 76 69         ** behavi
9370: 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 61  or so that all a
9380: 72 63 68 69 74 65 63 74 75 72 65 73 20 62 65 68  rchitectures beh
9390: 61 76 65 20 61 73 20 69 66 20 69 6e 74 65 67 65  ave as if intege
93a0: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 76  r .        ** ov
93b0: 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65 64 2e  erflow occurred.
93c0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
93d0: 20 20 20 20 69 66 28 20 61 3d 3d 2d 31 20 26 26      if( a==-1 &&
93e0: 20 62 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54   b==SMALLEST_INT
93f0: 36 34 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20  64 ) a = 1;.    
9400: 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20 20 20      b /= a;.    
9410: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9420: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
9430: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9440: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  a==0 ) goto arit
9450: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9460: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
9470: 66 28 20 61 3d 3d 2d 31 20 29 20 61 20 3d 20 31  f( a==-1 ) a = 1
9480: 3b 0a 20 20 20 20 20 20 20 20 62 20 25 3d 20 61  ;.        b %= a
9490: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
94a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
94b0: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 62     pOut->u.i = b
94c0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
94d0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
94e0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
94f0: 20 20 64 6f 75 62 6c 65 20 61 2c 20 62 3b 0a 20    double a, b;. 
9500: 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64     a = sqlite3Vd
9510: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
9520: 29 3b 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74  );.    b = sqlit
9530: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9540: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
9550: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9560: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9570: 41 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b  Add:         b +
9580: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
9590: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
95a0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d  Subtract:    b -
95b0: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
95c0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
95d0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a  Multiply:    b *
95e0: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
95f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9600: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
9610: 20 20 69 66 28 20 61 3d 3d 30 2e 30 20 29 20 67    if( a==0.0 ) g
9620: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9630: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9640: 20 20 20 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20         b /= a;. 
9650: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9660: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
9670: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
9680: 36 34 20 69 61 20 3d 20 28 69 36 34 29 61 3b 0a  64 ia = (i64)a;.
9690: 20 20 20 20 20 20 20 20 69 36 34 20 69 62 20 3d          i64 ib =
96a0: 20 28 69 36 34 29 62 3b 0a 20 20 20 20 20 20 20   (i64)b;.       
96b0: 20 69 66 28 20 69 61 3d 3d 30 20 29 20 67 6f 74   if( ia==0 ) got
96c0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
96d0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
96e0: 20 20 20 20 20 69 66 28 20 69 61 3d 3d 2d 31 20       if( ia==-1 
96f0: 29 20 69 61 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) ia = 1;.      
9700: 20 20 62 20 3d 20 28 64 6f 75 62 6c 65 29 28 69    b = (double)(i
9710: 62 20 25 20 69 61 29 3b 0a 20 20 20 20 20 20 20  b % ia);.       
9720: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9730: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
9740: 6c 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b  lite3IsNaN(b) ){
9750: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
9760: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9770: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
9780: 20 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20   pOut->r = b;.  
9790: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
97a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
97b0: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
97c0: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
97d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
97e0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
97f0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
9800: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
9810: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9820: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
9830: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9840: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
9850: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9860: 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a  CollSeq * * P4.*
9870: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
9880: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
9890: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
98a0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
98b0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
98c0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
98d0: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
98e0: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
98f0: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
9900: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
9910: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
9920: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
9930: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
9940: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
9950: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
9960: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
9970: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
9980: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
9990: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
99a0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
99b0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
99c0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
99d0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
99e0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
99f0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
9a00: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
9a10: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
9a20: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
9a30: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
9a40: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
9a50: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
9a60: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61  OLLSEQ );.  brea
9a70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9a80: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
9a90: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
9aa0: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
9ab0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
9ac0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
9ad0: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
9ae0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
9af0: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
9b00: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
9b10: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
9b20: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
9b30: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
9b40: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
9b50: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
9b60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9b70: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
9b80: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
9b90: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
9ba0: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
9bb0: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
9bc0: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
9bd0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
9be0: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
9bf0: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
9c00: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
9c10: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
9c20: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
9c30: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
9c40: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
9c50: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
9c60: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
9c70: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
9c80: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
9c90: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
9ca0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
9cb0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
9cc0: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
9cd0: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
9ce0: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
9cf0: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
9d00: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
9d10: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
9d20: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
9d30: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
9d40: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
9d50: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
9d60: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
9d70: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
9d80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
9d90: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
9da0: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
9db0: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  ;.  int n = pOp-
9dc0: 3e 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20  >p5;..  apVal = 
9dd0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
9de0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
9df0: 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  0 );..  assert( 
9e00: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
9e10: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
9e20: 3d 70 2d 3e 6e 4d 65 6d 29 20 29 3b 0a 20 20 61  =p->nMem) );.  a
9e30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
9e40: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
9e50: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
9e60: 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65    pArg = &p->aMe
9e70: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
9e80: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
9e90: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70   pArg++){.    ap
9ea0: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
9eb0: 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
9ec0: 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29  (pArg, encoding)
9ed0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9ee0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41  RACE(pOp->p2, pA
9ef0: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
9f00: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
9f10: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
9f20: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
9f30: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
9f40: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
9f50: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
9f60: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
9f70: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
9f80: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
9f90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
9fa0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
9fb0: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
9fc0: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
9fd0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
9fe0: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
9ff0: 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  c;.  }..  assert
a000: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
a010: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
a020: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
a030: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a040: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
a050: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
a060: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
a070: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
a080: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
a090: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
a0a0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
a0b0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
a0c0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
a0d0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
a0e0: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
a0f0: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
a100: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
a110: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
a120: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
a130: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
a140: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
a150: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
a160: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
a170: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
a180: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
a190: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
a1a0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
a1b0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
a1c0: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
a1d0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a1e0: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
a1f0: 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
a200: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
a210: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
a220: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
a230: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
a240: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
a250: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
a260: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
a270: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  oll;.  }.  if( s
a280: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
a290: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
a2a0: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
a2b0: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
a2c0: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
a2d0: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  pVal);.  if( sql
a2e0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
a2f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
a300: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
a310: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
a320: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
a330: 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  use;.  }.  if( d
a340: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
a350: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
a360: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
a370: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
a380: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
a390: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
a3a0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
a3b0: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
a3c0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
a3d0: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
a3e0: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
a3f0: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
a400: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
a410: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
a420: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
a430: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
a440: 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  alue..    **.   
a450: 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20   ** Note: Maybe 
a460: 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f  MemRelease() sho
a470: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66  uld be called if
a480: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
a490: 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20  ().    ** fails 
a4a0: 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e  also (the if(...
a4b0: 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  ) statement abov
a4c0: 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c  e). But if peopl
a4d0: 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73  e are.    ** mis
a4e0: 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68  using sqlite, th
a4f0: 65 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70  ey have bigger p
a500: 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c  roblems than a l
a510: 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20  eaked value..   
a520: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
a530: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
a540: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
a550: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
a560: 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61  * If any auxilia
a570: 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e  ry data function
a580: 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c  s have been call
a590: 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20  ed by this user 
a5a0: 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69  function,.  ** i
a5b0: 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20  mmediately call 
a5c0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  the destructor f
a5d0: 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69  or any non-stati
a5e0: 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20  c values..  */. 
a5f0: 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75   if( ctx.pVdbeFu
a600: 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nc ){.    sqlite
a610: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
a620: 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63  ta(ctx.pVdbeFunc
a630: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
a640: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
a650: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
a660: 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79  c;.    pOp->p4ty
a670: 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43  pe = P4_VDBEFUNC
a680: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
a690: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
a6a0: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
a6b0: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
a6c0: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  n */.  if( ctx.i
a6d0: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
a6e0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
a6f0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
a700: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
a710: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
a720: 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
a730: 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
a740: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
a750: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
a760: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
a770: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
a780: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
a790: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
a7a0: 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
a7b0: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
a7c0: 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20   &ctx.s);.  if( 
a7d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
a7e0: 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20  oBig(pOut) ){.  
a7f0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
a800: 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
a810: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
a820: 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
a830: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
a840: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
a850: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
a860: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
a870: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
a880: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
a890: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
a8a0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
a8b0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
a8c0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a8d0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a8e0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a8f0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a900: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a910: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
a920: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
a930: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
a940: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
a950: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
a960: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
a970: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a980: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a990: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a9a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a9b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a9c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
a9d0: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
a9e0: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
a9f0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
aa00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
aa10: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
aa20: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
aa30: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
aa40: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
aa50: 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53  regiser P1..** S
aa60: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
aa70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
aa80: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
aa90: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
aaa0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
aab0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
aac0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
aad0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
aae0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
aaf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ab00: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
ab10: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
ab20: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
ab30: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
ab40: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
ab50: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
ab60: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ab70: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ab80: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ab90: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
aba0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
abb0: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
abc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
abd0: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
abe0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
abf0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac10: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
ac20: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
ac30: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ac40: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
ac50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ac60: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
ac70: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ac80: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
ac90: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
aca0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
acb0: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
acc0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c  out3 */.  i64 a,
acd0: 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31   b;..  if( (pIn1
ace0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
acf0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
ad00: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
ad10: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
ad20: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
ad30: 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74  .  }.  a = sqlit
ad40: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ad50: 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69  In2);.  b = sqli
ad60: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ad70: 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28  pIn1);.  switch(
ad80: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
ad90: 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41      case OP_BitA
ada0: 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b  nd:      a &= b;
adb0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
adc0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
add0: 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20       a |= b;    
ade0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
adf0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
ae00: 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65   a <<= b;    bre
ae10: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
ae20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
ae30: 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52  pcode==OP_ShiftR
ae40: 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ight );.        
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65   a >>= b;    bre
ae70: 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ak;.  }.  pOut->
ae80: 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65  u.i = a;.  MemSe
ae90: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
aea0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
aeb0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
aec0: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
aed0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20   * *.** .** Add 
aee0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
aef0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
af00: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
af10: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
af20: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
af30: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
af40: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
af50: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
af60: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
af70: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
af80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
af90: 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  1 */.  sqlite3Vd
afa0: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
afb0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
afc0: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
afd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
afe0: 63 6f 64 65 3a 20 46 6f 72 63 65 49 6e 74 20 50  code: ForceInt P
aff0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b000: 2a 20 43 6f 6e 76 65 72 74 20 76 61 6c 75 65 20  * Convert value 
b010: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b020: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  nto an integer. 
b030: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 0a 2a   If the value .*
b040: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 6e  * in P1 is not n
b050: 75 6d 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20  umeric (meaning 
b060: 74 68 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c  that is is a NUL
b070: 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
b080: 61 74 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c  at.** does not l
b090: 6f 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65  ook like an inte
b0a0: 67 65 72 29 20 74 68 65 6e 20 6a 75 6d 70 20 74  ger) then jump t
b0b0: 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
b0c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 20 69  he value in P1 i
b0d0: 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20 63  s numeric then c
b0e0: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 74  onvert it into t
b0f0: 68 65 20 73 6d 61 6c 6c 65 73 74 0a 2a 2a 20 69  he smallest.** i
b100: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 67  nteger that is g
b110: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
b120: 71 75 61 6c 20 74 6f 20 69 74 73 20 63 75 72 72  qual to its curr
b130: 65 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  ent value if P3=
b140: 3d 30 2c 20 0a 2a 2a 20 6f 72 20 74 6f 20 74 68  =0, .** or to th
b150: 65 20 73 6d 61 6c 6c 65 73 74 20 69 6e 74 65 67  e smallest integ
b160: 65 72 20 74 68 61 74 20 69 73 20 73 74 72 69 63  er that is stric
b170: 74 6c 79 20 67 72 65 61 74 65 72 20 74 68 61 6e  tly greater than
b180: 20 69 74 73 20 63 75 72 72 65 6e 74 0a 2a 2a 20   its current.** 
b190: 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 31 2e 0a  value if P3==1..
b1a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6e  **.** If the con
b1b0: 76 65 72 73 69 6f 6e 20 64 65 73 63 72 69 62 65  version describe
b1c0: 64 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  d in the previou
b1d0: 73 20 70 61 72 61 67 72 61 70 68 20 63 61 75 73  s paragraph caus
b1e0: 65 73 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  es the.** value 
b1f0: 74 6f 20 65 78 63 65 65 64 20 74 68 65 20 6c 61  to exceed the la
b200: 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
b210: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 0a 2a 2a  nteger value .**
b220: 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
b230: 37 35 38 30 37 29 2c 20 74 68 65 6e 20 6a 75 6d  75807), then jum
b240: 70 20 74 6f 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  p to P2..*/.case
b250: 20 4f 50 5f 46 6f 72 63 65 49 6e 74 3a 20 7b 20   OP_ForceInt: { 
b260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
b270: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 36 34  mp, in1 */.  i64
b280: 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
b290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b2a0: 20 76 61 6c 75 65 20 74 6f 20 73 74 6f 72 65 20   value to store 
b2b0: 69 6e 20 50 31 20 2a 2f 0a 20 20 69 6e 74 20 69  in P1 */.  int i
b2c0: 6e 63 72 56 20 3d 20 30 3b 20 20 20 20 20 20 20  ncrV = 0;       
b2d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
b2e0: 74 6f 20 63 61 75 73 65 20 76 20 74 6f 20 69 6e  to cause v to in
b2f0: 63 72 65 6d 65 6e 74 20 2a 2f 0a 20 20 61 70 70  crement */.  app
b300: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
b310: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
b320: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
b330: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
b340: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
b350: 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20  M_Real))==0 ){. 
b360: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
b370: 2d 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  - 1;.    break;.
b380: 20 20 7d 0a 20 20 69 6e 63 72 56 20 3d 20 70 4f    }.  incrV = pO
b390: 70 2d 3e 70 33 20 3f 31 3a 30 3b 0a 20 20 69 66  p->p3 ?1:0;.  if
b3a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
b3b0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 76  MEM_Int ){.    v
b3c0: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
b3d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
b3e0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
b3f0: 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
b400: 20 76 20 3d 20 28 73 71 6c 69 74 65 33 5f 69 6e   v = (sqlite3_in
b410: 74 36 34 29 70 49 6e 31 2d 3e 72 3b 0a 20 20 20  t64)pIn1->r;.   
b420: 20 69 66 28 20 70 49 6e 31 2d 3e 72 3e 28 64 6f   if( pIn1->r>(do
b430: 75 62 6c 65 29 76 20 29 7b 0a 20 20 20 20 20 20  uble)v ){.      
b440: 69 6e 63 72 56 20 3d 20 31 3b 0a 20 20 20 20 7d  incrV = 1;.    }
b450: 0a 20 20 7d 0a 20 20 69 66 28 20 69 6e 63 72 56  .  }.  if( incrV
b460: 20 29 7b 0a 20 20 20 20 69 66 28 20 76 3d 3d 4c   ){.    if( v==L
b470: 41 52 47 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a  ARGEST_INT64 ){.
b480: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
b490: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
b4a0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76  eak;.    }.    v
b4b0: 2b 2b 3b 0a 20 20 7d 0a 20 20 70 49 6e 31 2d 3e  ++;.  }.  pIn1->
b4c0: 75 2e 69 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65  u.i = v;.  MemSe
b4d0: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
b4e0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
b4f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b500: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
b510: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
b520: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
b530: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
b540: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
b550: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
b560: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
b570: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
b580: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
b590: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
b5a0: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
b5b0: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
b5c0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
b5d0: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
b5e0: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
b5f0: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
b600: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
b610: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
b620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
b630: 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79  , in1 */.  apply
b640: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
b650: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
b660: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
b670: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b680: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
b690: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
b6a0: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
b6b0: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
b6c0: 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  CH;.      goto a
b6d0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
b6e0: 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
b6f0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
b700: 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
b710: 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  lse{.    MemSetT
b720: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
b730: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
b740: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b750: 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20  e: RealAffinity 
b760: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b770: 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
b780: 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
b790: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
b7a0: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a   real value..**.
b7b0: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
b7c0: 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72  s used when extr
b7d0: 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  acting informati
b7e0: 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  on from a column
b7f0: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41   that.** has REA
b800: 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63  L affinity.  Suc
b810: 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  h column values 
b820: 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f  may still be sto
b830: 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65  red as.** intege
b840: 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66  rs, for space ef
b850: 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66  ficiency, but af
b860: 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77  ter extraction w
b870: 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74  e want them.** t
b880: 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65  o have only a re
b890: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  al value..*/.cas
b8a0: 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74  e OP_RealAffinit
b8b0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
b8c0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
b8d0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
b8e0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
b8f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b900: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
b910: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
b920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b930: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
b940: 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20  de: ToText P1 * 
b950: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
b960: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
b970: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
b980: 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65   text..** If the
b990: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
b9a0: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
b9b0: 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20   a string using 
b9c0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
b9d0: 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20  t of printf().  
b9e0: 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20  Blob values are 
b9f0: 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a  unchanged and.**
ba00: 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20   are afterwards 
ba10: 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74  simply interpret
ba20: 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a  ed as text..**.*
ba30: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
ba40: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
ba50: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
ba60: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
ba70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65  .*/.case OP_ToTe
ba80: 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  xt: {           
ba90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
baa0: 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e  s TK_TO_TEXT, in
bab0: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
bac0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
bad0: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73  l ) break;.  ass
bae0: 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d  ert( MEM_Str==(M
baf0: 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20  EM_Blob>>3) );. 
bb00: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20   pIn1->flags |= 
bb10: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
bb20: 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70  _Blob)>>3;.  app
bb30: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
bb40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
bb50: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72  , encoding);.  r
bb60: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
bb70: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
bb80: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
bb90: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
bba0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70  locFailed );.  p
bbb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
bbc0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
bbd0: 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50  |MEM_Blob);.  UP
bbe0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
bbf0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
bc00: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bc10: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
bc20: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
bc30: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bc40: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
bc50: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
bc60: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bc70: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bc80: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
bc90: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
bca0: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
bcb0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
bcc0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
bcd0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
bce0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
bcf0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
bd00: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
bd10: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
bd20: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
bd30: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
bd60: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
bd70: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
bd80: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
bd90: 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  eak;.  if( (pIn1
bda0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
bdb0: 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  ob)==0 ){.    ap
bdc0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
bdd0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
bde0: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
bdf0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
be00: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
be10: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
be20: 6c 65 64 20 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d  led );.  }.  Mem
be30: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
be40: 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55  , MEM_Blob);.  U
be50: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
be60: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
be70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
be80: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
be90: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
bea0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
beb0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bec0: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
bed0: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
bee0: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
bef0: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
bf00: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
bf10: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
bf20: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
bf30: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
bf40: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
bf50: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
bf60: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
bf70: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
bf80: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
bf90: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
bfa0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
bfb0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
bfc0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
bfd0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
bfe0: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c010: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
c020: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c030: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c  flags & (MEM_Nul
c040: 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  l|MEM_Int|MEM_Re
c050: 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  al))==0 ){.    s
c060: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
c070: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
c080: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
c090: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
c0a0: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
c0b0: 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a  code: ToInt P1 *
c0c0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c0d0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c0e0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 20 61  register P1 be a
c0f0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
c100: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
c110: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
c120: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
c130: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
c140: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c150: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
c160: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
c170: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
c180: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
c190: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
c1a0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
c1b0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c1c0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c1d0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c1e0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c1f0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c200: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c210: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c220: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c240: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
c250: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  NT, in1 */.  if(
c260: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c270: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c280: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c290: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
c2a0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
c2b0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
c2c0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
c2d0: 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50  Opcode: ToReal P
c2e0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c2f0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c300: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c310: 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20  o be a floating 
c320: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a  point number..**
c330: 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73   If The value is
c340: 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e   currently an in
c350: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
c360: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c370: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
c380: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
c390: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
c3a0: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
c3b0: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c3c0: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
c3d0: 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  0.0 if no such c
c3e0: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
c3f0: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
c400: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
c410: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
c420: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
c430: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
c440: 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b  ase OP_ToReal: {
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c460: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c470: 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a  TO_REAL, in1 */.
c480: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c490: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
c4a0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
c4b0: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
c4c0: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c4d0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
c4e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
c4f0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
c500: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
c510: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
c520: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c530: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
c540: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
c550: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
c560: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
c570: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
c580: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
c590: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
c5a0: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
c5b0: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
c5c0: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
c5d0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
c5e0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
c5f0: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
c600: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
c610: 66 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69 74  fall thru if eit
c620: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
c630: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
c640: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
c650: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
c660: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
c670: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
c680: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
c690: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
c6a0: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
c6b0: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
c6c0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
c6d0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
c6e0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
c6f0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
c700: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
c710: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
c720: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
c730: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
c740: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
c750: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
c760: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
c770: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
c780: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
c790: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
c7a0: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
c7b0: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
c7c0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
c7d0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
c7e0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
c7f0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
c800: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
c810: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
c820: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
c830: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
c840: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
c850: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
c860: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
c870: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
c880: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
c890: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
c8a0: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
c8b0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
c8c0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
c8d0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
c8e0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
c8f0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
c900: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
c910: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
c920: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
c930: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
c940: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
c950: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
c960: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
c970: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
c980: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
c990: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
c9a0: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
c9b0: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
c9c0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
c9d0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
c9e0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
c9f0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
ca00: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
ca10: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
ca20: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
ca30: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
ca40: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
ca50: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
ca60: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
ca70: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
ca80: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
ca90: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
caa0: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
cab0: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
cac0: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
cad0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
cae0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
caf0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
cb00: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
cb10: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
cb20: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
cb30: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
cb40: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
cb50: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
cb60: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
cb70: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
cb80: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
cb90: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
cba0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
cbb0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .*/./* Opcode: E
cbc0: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
cbd0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
cbe0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
cbf0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
cc00: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
cc10: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
cc20: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
cc30: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
cc40: 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20  3 are equal..** 
cc50: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
cc60: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
cc70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
cc80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
cc90: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cca0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
ccb0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
ccc0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ccd0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
cce0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
ccf0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
cd00: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
cd10: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
cd20: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
cd30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
cd40: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
cd50: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
cd60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
cd70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
cd80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cd90: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
cda0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
cdb0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
cdc0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
cdd0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
cde0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
cdf0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
ce00: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
ce10: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
ce20: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
ce30: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
ce40: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
ce50: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
ce60: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
ce70: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
ce80: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
ce90: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
cea0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
ceb0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
cec0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
ced0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
cee0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
cef0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
cf00: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
cf10: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
cf20: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
cf30: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
cf40: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
cf50: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
cf60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cf70: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
cf80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
cf90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
cfa0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
cfb0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
cfc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfe0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
cff0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
d000: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
d010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d020: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
d030: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
d040: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
d050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d060: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
d070: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d080: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
d090: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d0a0: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
d0b0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
d0c0: 74 20 66 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72  t flags;.  int r
d0d0: 65 73 3b 0a 20 20 63 68 61 72 20 61 66 66 69 6e  es;.  char affin
d0e0: 69 74 79 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20  ity;..  flags = 
d0f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33  pIn1->flags|pIn3
d100: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20  ->flags;..  if( 
d110: 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
d120: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 65 69 74 68  {.    /* If eith
d130: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d140: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d150: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
d160: 4c 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  L..    ** The ju
d170: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
d180: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
d190: 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
d1a0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
d1b0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
d1c0: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
d1d0: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
d1e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
d1f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d200: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
d210: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
d220: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
d230: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pOut);.    }else
d240: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
d250: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d260: 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
d270: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  Op->p2-1;.    }.
d280: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
d290: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
d2a0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
d2b0: 46 5f 4d 41 53 4b 3b 0a 20 20 69 66 28 20 61 66  F_MASK;.  if( af
d2c0: 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 61 70  finity ){.    ap
d2d0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
d2e0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
d2f0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 70 70 6c 79  ding);.    apply
d300: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61  Affinity(pIn3, a
d310: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d320: 67 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  g);.    if( db->
d330: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
d340: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
d350: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d360: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
d370: 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
d380: 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61  oll==0 );.  Expa
d390: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
d3a0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
d3b0: 3b 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65  ;.  res = sqlite
d3c0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
d3d0: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
d3e0: 70 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68  pColl);.  switch
d3f0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
d400: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
d410: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
d420: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
d430: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
d440: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
d450: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d460: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
d470: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
d480: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d490: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
d4a0: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
d4b0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
d4c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
d4d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d4e0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
d4f0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
d500: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
d510: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
d520: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
d530: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
d540: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
d550: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d560: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d570: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
d580: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
d590: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
d5a0: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
d5b0: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
d5c0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
d5d0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
d5e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
d5f0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
d600: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
d610: 70 65 72 6d 75 61 74 69 6f 6e 20 75 73 65 64 20  permuation used 
d620: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
d630: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
d640: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
d650: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
d660: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
d670: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
d680: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
d690: 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ext OP_Permutati
d6a0: 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a  on, OP_Compare,.
d6b0: 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f  ** OP_Halt, or O
d6c0: 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79  P_ResultRow.  Ty
d6d0: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
d6e0: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
d6f0: 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64  d occur.** immed
d700: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
d710: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
d720: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
d730: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
d740: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d750: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
d760: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d770: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
d780: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
d790: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d7a0: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
d7b0: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
d7c0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76  .** Compare to v
d7d0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
d7e0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
d7f0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c  reg(P1+P3-1) (al
d800: 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41  l this.** one "A
d810: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
d820: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
d830: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
d840: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
d850: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
d860: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
d870: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
d880: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
d890: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
d8a0: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
d8b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d8c0: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
d8d0: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
d8e0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
d8f0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
d900: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
d910: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
d920: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
d930: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
d940: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
d950: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
d960: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
d970: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
d980: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
d990: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
d9a0: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
d9b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
d9c0: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
d9d0: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
d9e0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
d9f0: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
da00: 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70   {.  int n = pOp
da10: 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 69 2c 20 70  ->p3;.  int i, p
da20: 31 2c 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  1, p2;.  const K
da30: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
da40: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
da50: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
da60: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
da70: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
da80: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
da90: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
daa0: 20 70 31 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d 20   p1+n-1<p->nMem 
dab0: 29 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  );.  p2 = pOp->p
dac0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e  2;.  assert( p2>
dad0: 30 20 26 26 20 70 32 2b 6e 2d 31 3c 70 2d 3e 6e  0 && p2+n-1<p->n
dae0: 4d 65 6d 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  Mem );.  for(i=0
daf0: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
db00: 20 69 6e 74 20 69 64 78 20 3d 20 61 50 65 72 6d   int idx = aPerm
db10: 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69  ute ? aPermute[i
db20: 5d 20 3a 20 69 3b 0a 20 20 20 20 43 6f 6c 6c 53  ] : i;.    CollS
db30: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
db40: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
db50: 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
db60: 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 20 20 69  is term */.    i
db70: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
db80: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
db90: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
dba0: 64 65 72 20 2a 2f 0a 20 20 20 20 52 45 47 49 53  der */.    REGIS
dbb0: 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
dbc0: 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64  , &p->aMem[p1+id
dbd0: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
dbe0: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
dbf0: 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  &p->aMem[p2+idx]
dc00: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
dc10: 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
dc20: 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
dc30: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
dc40: 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
dc50: 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
dc60: 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
dc70: 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
dc80: 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d  emCompare(&p->aM
dc90: 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e  em[p1+idx], &p->
dca0: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
dcb0: 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
dcc0: 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
dcd0: 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
dce0: 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
dcf0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
dd00: 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
dd10: 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
dd20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
dd30: 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
dd40: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
dd50: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
dd60: 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
dd70: 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
dd80: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
dd90: 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
dda0: 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
ddb0: 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
ddc0: 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
ddd0: 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
dde0: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
ddf0: 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
de00: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
de10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
de20: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
de30: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
de40: 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
de50: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
de60: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
de70: 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
de80: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
de90: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
dea0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d    pc = pOp->p3 -
deb0: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
dec0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
ded0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
dee0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
def0: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
df00: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
df10: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
df20: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
df30: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
df40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
df50: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
df60: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
df70: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
df80: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
df90: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
dfa0: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
dfb0: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
dfc0: 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
dfd0: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
dfe0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
dff0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e000: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
e010: 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
e020: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e030: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
e040: 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
e050: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
e060: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
e070: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
e080: 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
e090: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e0a0: 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
e0b0: 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
e0c0: 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
e0d0: 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
e0e0: 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
e0f0: 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
e100: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
e110: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
e120: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
e130: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
e140: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
e150: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
e160: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
e170: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
e180: 2a 2f 0a 20 20 69 6e 74 20 76 31 2c 20 76 32 3b  */.  int v1, v2;
e190: 20 20 20 20 2f 2a 20 30 3d 3d 46 41 4c 53 45 2c      /* 0==FALSE,
e1a0: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
e1b0: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
e1c0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e1d0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e1e0: 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
e1f0: 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
e200: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e210: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
e220: 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
e230: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e240: 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
e250: 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
e260: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e270: 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
e280: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
e290: 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
e2a0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
e2b0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
e2c0: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
e2d0: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
e2e0: 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
e2f0: 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
e300: 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
e310: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e320: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
e330: 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
e340: 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
e350: 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
e360: 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
e370: 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28  3+v2];.  }.  if(
e380: 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
e390: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e3a0: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
e3b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
e3c0: 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
e3d0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e3e0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
e3f0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
e400: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
e410: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  * * * *.**.** In
e420: 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
e430: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e440: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
e450: 6c 75 65 2e 20 20 52 65 70 6c 61 63 65 20 69 74  lue.  Replace it
e460: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 63 6f 6d  .** with its com
e470: 70 6c 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  plement.  If the
e480: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e490: 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 20 69 74  er P1 is NULL it
e4a0: 73 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 75 6e  s value.** is un
e4b0: 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65  changed..*/.case
e4c0: 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
e4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e4e0: 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
e4f0: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
e500: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
e510: 20 29 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44 6f   ) break;  /* Do
e520: 20 6e 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c 4c   nothing to NULL
e530: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
e540: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
e550: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
e560: 2e 69 20 3d 20 21 70 49 6e 31 2d 3e 75 2e 69 3b  .i = !pIn1->u.i;
e570: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
e580: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
e590: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e5a0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
e5b0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
e5c0: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
e5d0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e5e0: 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
e5f0: 67 65 72 2e 20 20 52 65 70 6c 61 63 65 20 69 74  ger.  Replace it
e600: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 6f 6e 65  .** with its one
e610: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s-complement.  I
e620: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6f  f the value is o
e630: 72 69 67 69 6e 61 6c 6c 79 20 4e 55 4c 4c 2c 20  riginally NULL, 
e640: 6c 65 61 76 65 0a 2a 2a 20 69 74 20 75 6e 63 68  leave.** it unch
e650: 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  anged..*/.case O
e660: 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
e670: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e680: 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
e690: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
e6a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e6b0: 6c 20 29 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44  l ) break;  /* D
e6c0: 6f 20 6e 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c  o nothing to NUL
e6d0: 4c 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  Ls */.  sqlite3V
e6e0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
e6f0: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
e700: 75 2e 69 20 3d 20 7e 70 49 6e 31 2d 3e 75 2e 69  u.i = ~pIn1->u.i
e710: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
e720: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
e730: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
e740: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
e750: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e760: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e770: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e780: 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
e790: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
e7a0: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
e7b0: 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
e7c0: 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
e7d0: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
e7e0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
e7f0: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
e800: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
e810: 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ue..*/./* Opcode
e820: 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
e830: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
e840: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
e850: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e860: 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
e870: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
e880: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
e890: 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
e8a0: 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
e8b0: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
e8c0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
e8d0: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
e8e0: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
e8f0: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ue..*/.case OP_I
e900: 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
e910: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
e920: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
e930: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e940: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
e950: 20 69 6e 74 20 63 3b 0a 20 20 69 66 28 20 70 49   int c;.  if( pI
e960: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e970: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
e980: 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
e990: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
e9a0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
e9b0: 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
e9c0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
e9d0: 70 49 6e 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20  pIn1);.#else.   
e9e0: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
e9f0: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
ea00: 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
ea10: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
ea20: 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
ea30: 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63   !c;.  }.  if( c
ea40: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ea50: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
ea60: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ea70: 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
ea80: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
ea90: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
eaa0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
eab0: 20 50 31 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66   P1 is NULL.  If
eac0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 0a 2a   P3 is greater.*
ead0: 2a 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  * than zero, the
eae0: 6e 20 63 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75  n check all valu
eaf0: 65 73 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  es reg(P1), reg(
eb00: 50 31 2b 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50  P1+1), .** reg(P
eb10: 31 2b 32 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50  1+2), ..., reg(P
eb20: 31 2b 50 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65  1+P3-1)..*/.case
eb30: 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
eb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
eb50: 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
eb60: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
eb70: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  t n = pOp->p3;. 
eb80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
eb90: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 31 3e 30  ==0 || pOp->p1>0
eba0: 20 29 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 66   );.  do{.    if
ebb0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
ebc0: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
ebd0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
ebe0: 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
ebf0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
ec00: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pIn1++;.  }while
ec10: 28 20 2d 2d 6e 20 3e 20 30 20 29 3b 0a 20 20 62  ( --n > 0 );.  b
ec20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ec30: 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
ec40: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  2 * * *.**.** Ju
ec50: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
ec60: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ec70: 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
ec80: 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
ec90: 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
eca0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ecb0: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
ecc0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
ecd0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ece0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
ecf0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
ed00: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
ed10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
ed20: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50  etNumColumns * P
ed30: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
ed40: 69 73 20 6f 70 63 6f 64 65 20 73 65 74 73 20 74  is opcode sets t
ed50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
ed60: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 63 75 72  umns for the cur
ed70: 73 6f 72 20 6f 70 65 6e 65 64 20 62 79 20 74 68  sor opened by th
ed80: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 69  e.** following i
ed90: 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 50 32  nstruction to P2
eda0: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65  ..**.** An OP_Se
edb0: 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 73 20 6f  tNumColumns is o
edc0: 6e 6c 79 20 75 73 65 66 75 6c 20 69 66 20 69 74  nly useful if it
edd0: 20 6f 63 63 75 72 73 20 69 6d 6d 65 64 69 61 74   occurs immediat
ede0: 65 6c 79 20 62 65 66 6f 72 65 20 0a 2a 2a 20 6f  ely before .** o
edf0: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
ee00: 69 6e 67 20 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a  ing opcodes:.**.
ee10: 2a 2a 20 20 20 20 20 4f 70 65 6e 52 65 61 64 0a  **     OpenRead.
ee20: 2a 2a 20 20 20 20 20 4f 70 65 6e 57 72 69 74 65  **     OpenWrite
ee30: 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 50 73 65 75  .**     OpenPseu
ee40: 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  do.**.** If the 
ee50: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
ee60: 20 69 73 20 74 6f 20 62 65 20 65 78 65 63 75 74   is to be execut
ee70: 65 64 20 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed on a cursor, 
ee80: 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63  then.** this opc
ee90: 6f 64 65 20 6d 75 73 74 20 62 65 20 70 72 65 73  ode must be pres
eea0: 65 6e 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ent immediately 
eeb0: 62 65 66 6f 72 65 20 74 68 65 20 6f 70 63 6f 64  before the opcod
eec0: 65 20 74 68 61 74 0a 2a 2a 20 6f 70 65 6e 73 20  e that.** opens 
eed0: 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 63  the cursor..*/.c
eee0: 61 73 65 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c  ase OP_SetNumCol
eef0: 75 6d 6e 73 3a 20 7b 0a 20 20 62 72 65 61 6b 3b  umns: {.  break;
ef00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
ef10: 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
ef20: 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  4 *.**.** Interp
ef30: 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
ef40: 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
ef50: 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
ef60: 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
ef70: 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
ef80: 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
ef90: 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
efa0: 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
efb0: 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
efc0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
efd0: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
efe0: 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
eff0: 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
f000: 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
f010: 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
f020: 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
f030: 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
f040: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
f050: 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
f060: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
f070: 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
f080: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
f090: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
f0a0: 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
f0b0: 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
f0c0: 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
f0d0: 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
f0e0: 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
f0f0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
f100: 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
f110: 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
f120: 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
f130: 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  esult..*/.case O
f140: 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
f150: 74 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20  t payloadSize;  
f160: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
f170: 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
f180: 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20  d */.  int p1 = 
f190: 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20 50 31 20  pOp->p1;  /* P1 
f1a0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
f1b0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 20  ode */.  int p2 
f1c0: 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f 2a 20 63  = pOp->p2;  /* c
f1d0: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
f1e0: 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
f1f0: 62 65 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30  beCursor *pC = 0
f200: 3b 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72  ;/* The VDBE cur
f210: 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
f220: 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
f230: 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
f240: 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
f250: 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
f260: 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
f270: 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
f280: 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
f290: 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
f2a0: 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
f2b0: 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
f2c0: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
f2d0: 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
f2e0: 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
f2f0: 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
f300: 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
f310: 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
f320: 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
f330: 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
f340: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
f350: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
f360: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
f370: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
f380: 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
f390: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
f3a0: 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
f3b0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
f3c0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
f3d0: 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
f3e0: 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
f3f0: 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
f400: 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
f410: 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
f420: 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
f430: 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
f440: 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
f450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
f460: 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
f470: 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
f480: 64 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26  d */..  memset(&
f490: 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
f4a0: 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73 65 72 74  sMem));.  assert
f4b0: 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ( p1<p->nCursor 
f4c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
f4d0: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
f4e0: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
f4f0: 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d  pDest = &p->aMem
f500: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d  [pOp->p3];.  Mem
f510: 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
f520: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  t, MEM_Null);.. 
f530: 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73   /* This block s
f540: 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65  ets the variable
f550: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20   payloadSize to 
f560: 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  be the total num
f570: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65  ber of.  ** byte
f580: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e  s in the record.
f590: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20  .  **.  ** zRec 
f5a0: 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65  is set to be the
f5b0: 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   complete text o
f5c0: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  f the record if 
f5d0: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  it is available.
f5e0: 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65  .  ** The comple
f5f0: 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69  te record text i
f600: 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62  s always availab
f610: 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  le for pseudo-ta
f620: 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65  bles.  ** If the
f630: 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65   record is store
f640: 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74  d in a cursor, t
f650: 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  he complete reco
f660: 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67  rd text.  ** mig
f670: 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20  ht be available 
f680: 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77  in the  pC->aRow
f690: 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d   cache.  Or it m
f6a0: 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a  ight not be..  *
f6b0: 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73  * If the data is
f6c0: 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a   unavailable,  z
f6d0: 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55  Rec is set to NU
f6e0: 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65  LL..  **.  ** We
f6f0: 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68   also compute th
f700: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
f710: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  mns in the recor
f720: 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c  d.  For cursors,
f730: 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  .  ** the number
f740: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73   of columns is s
f750: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62  tored in the Vdb
f760: 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65  eCursor.nField e
f770: 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70  lement..  */.  p
f780: 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d  C = p->apCsr[p1]
f790: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
f7a0: 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 );.#ifndef SQL
f7b0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
f7c0: 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20  TABLE.  assert( 
f7d0: 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d  pC->pVtabCursor=
f7e0: 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69  =0 );.#endif.  i
f7f0: 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  f( pC->pCursor!=
f800: 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
f810: 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
f820: 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
f830: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
f840: 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
f850: 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
f860: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
f870: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
f880: 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20 70 43  zRec = 0;.    pC
f890: 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
f8a0: 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  r;.    if( pC->n
f8b0: 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
f8c0: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
f8d0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
f8e0: 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d  C->cacheStatus==
f8f0: 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20  p->cacheCtr ){. 
f900: 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
f910: 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   = pC->payloadSi
f920: 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d  ze;.      zRec =
f930: 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77   (char*)pC->aRow
f940: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
f950: 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
f960: 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f 61 64       i64 payload
f970: 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 73 71  Size64;.      sq
f980: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
f990: 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
f9a0: 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20  dSize64);.      
f9b0: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 69  payloadSize = (i
f9c0: 6e 74 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  nt)payloadSize64
f9d0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
f9e0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44     sqlite3BtreeD
f9f0: 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 28  ataSize(pCrsr, (
fa00: 75 33 32 20 2a 29 26 70 61 79 6c 6f 61 64 53 69  u32 *)&payloadSi
fa10: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  ze);.    }.    n
fa20: 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
fa30: 6c 64 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ld;.  }else{.   
fa40: 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
fa50: 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  udoTable );.    
fa60: 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73  /* The record is
fa70: 20 74 68 65 20 73 6f 6c 65 20 65 6e 74 72 79 20   the sole entry 
fa80: 6f 66 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  of a pseudo-tabl
fa90: 65 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64  e */.    payload
faa0: 53 69 7a 65 20 3d 20 70 43 2d 3e 6e 44 61 74 61  Size = pC->nData
fab0: 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 43 2d  ;.    zRec = pC-
fac0: 3e 70 44 61 74 61 3b 0a 20 20 20 20 70 43 2d 3e  >pData;.    pC->
fad0: 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
fae0: 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 61  CHE_STALE;.    a
faf0: 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69  ssert( payloadSi
fb00: 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30  ze==0 || zRec!=0
fb10: 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   );.    nField =
fb20: 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 20   pC->nField;.   
fb30: 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 7d 0a   pCrsr = 0;.  }.
fb40: 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
fb50: 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
fb60: 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
fb70: 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  L */.  if( paylo
fb80: 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
fb90: 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
fba0: 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
fbb0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
fbc0: 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
fbd0: 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3e  if( payloadSize>
fbe0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
fbf0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
fc00: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
fc10: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  big;.  }..  asse
fc20: 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b  rt( p2<nField );
fc30: 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20  ..  /* Read and 
fc40: 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65 20  parse the table 
fc50: 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74  header.  Store t
fc60: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
fc70: 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74  e parse.  ** int
fc80: 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  o the record hea
fc90: 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64 73  der cache fields
fca0: 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a   of the cursor..
fcb0: 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70    */.  aType = p
fcc0: 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20  C->aType;.  if( 
fcd0: 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
fce0: 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
fcf0: 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43      aOffset = pC
fd00: 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c  ->aOffset;.  }el
fd10: 73 65 7b 0a 20 20 20 20 75 38 20 2a 7a 49 64 78  se{.    u8 *zIdx
fd20: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65  ;        /* Inde
fd30: 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f  x into header */
fd40: 0a 20 20 20 20 75 38 20 2a 7a 45 6e 64 48 64 72  .    u8 *zEndHdr
fd50: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
fd60: 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
fd70: 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
fd80: 2a 2f 0a 20 20 20 20 69 6e 74 20 6f 66 66 73 65  */.    int offse
fd90: 74 3b 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65  t;      /* Offse
fda0: 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
fdb0: 2a 2f 0a 20 20 20 20 69 6e 74 20 73 7a 48 64 72  */.    int szHdr
fdc0: 53 7a 3b 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  Sz;     /* Size 
fdd0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69  of the header si
fde0: 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72  ze field at star
fdf0: 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20  t of record */. 
fe00: 20 20 20 69 6e 74 20 61 76 61 69 6c 20 3d 20 30     int avail = 0
fe10: 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
fe20: 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
fe30: 62 6c 65 20 64 61 74 61 20 2a 2f 0a 0a 20 20 20  ble data */..   
fe40: 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a   assert(aType);.
fe50: 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20      pC->aOffset 
fe60: 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79  = aOffset = &aTy
fe70: 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  pe[nField];.    
fe80: 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
fe90: 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  = payloadSize;. 
fea0: 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
feb0: 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
fec0: 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65  ;..    /* Figure
fed0: 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79   out how many by
fee0: 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68  tes are in the h
fef0: 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28  eader */.    if(
ff00: 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a   zRec ){.      z
ff10: 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20  Data = zRec;.   
ff20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
ff30: 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
ff40: 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
ff50: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
ff60: 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
ff70: 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
ff80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ff90: 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
ffa0: 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74  )sqlite3BtreeDat
ffb0: 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
ffc0: 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
ffd0: 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65       /* If KeyFe
ffe0: 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28  tch()/DataFetch(
fff0: 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74  ) managed to get
10000 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c   the entire payl
10010 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61  oad,.      ** sa
10020 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  ve the payload i
10030 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63  n the pC->aRow c
10040 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c  ache.  That will
10050 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20   save us from.  
10060 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f      ** having to
10070 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c   make additional
10080 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20   calls to fetch 
10090 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74  the content port
100a0 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20  ion of.      ** 
100b0 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
100c0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61    */.      if( a
100d0 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a  vail>=payloadSiz
100e0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65  e ){.        zRe
100f0 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20  c = zData;.     
10100 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
10110 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20  8*)zData;.      
10120 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
10130 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
10140 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f     }.    }.    /
10150 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
10160 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69  assert is true i
10170 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65  n all cases acce
10180 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74  pt when.    ** t
10190 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
101a0 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70   has been corrup
101b0 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a  ted externally..
101c0 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74      **    assert
101d0 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61  ( zRec!=0 || ava
101e0 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
101f0 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a  || avail>=9 ); *
10200 2f 0a 20 20 20 20 73 7a 48 64 72 53 7a 20 3d 20  /.    szHdrSz = 
10210 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a  getVarint32((u8*
10220 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b  )zData, offset);
10230 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79  ..    /* The Key
10240 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46  Fetch() or DataF
10250 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65  etch() above are
10260 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67   fast and will g
10270 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20  et the entire.  
10280 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64    ** record head
10290 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73  er in most cases
102a0 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c  .  But they will
102b0 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65   fail to get the
102c0 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a   complete.    **
102d0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
102e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  f the record hea
102f0 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74  der does not fit
10300 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67   on a single pag
10310 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20  e.    ** in the 
10320 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68  B-Tree.  When th
10330 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20  at happens, use 
10340 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
10350 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20  omBtree() to.   
10360 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20   ** acquire the 
10370 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20  complete header 
10380 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  text..    */.   
10390 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76   if( !zRec && av
103a0 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
103b0 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
103c0 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64   0;.      sMem.d
103d0 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  b = 0;.      rc 
103e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
103f0 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
10400 20 30 2c 20 6f 66 66 73 65 74 2c 20 70 43 2d 3e   0, offset, pC->
10410 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
10420 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
10430 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
10440 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
10450 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
10460 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
10470 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
10480 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29  zEndHdr = (u8 *)
10490 26 7a 44 61 74 61 5b 6f 66 66 73 65 74 5d 3b 0a  &zData[offset];.
104a0 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
104b0 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 53 7a 5d  )&zData[szHdrSz]
104c0 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74  ;..    /* Scan t
104d0 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75 73  he header and us
104e0 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20  e it to fill in 
104f0 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20  the aType[] and 
10500 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a  aOffset[].    **
10510 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b   arrays.  aType[
10520 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
10530 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72  the type integer
10540 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20   for the i-th.  
10550 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20    ** column and 
10560 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20  aOffset[i] will 
10570 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73  contain the offs
10580 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
10590 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20  nning.    ** of 
105a0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68  the record to th
105b0 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64  e start of the d
105c0 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ata for the i-th
105d0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20   column.    */. 
105e0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46     for(i=0; i<nF
105f0 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ield; i++){.    
10600 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48    if( zIdx<zEndH
10610 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f  dr ){.        aO
10620 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
10630 74 3b 0a 20 20 20 20 20 20 20 20 7a 49 64 78 20  t;.        zIdx 
10640 2b 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 7a  += getVarint32(z
10650 49 64 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a  Idx, aType[i]);.
10660 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
10670 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
10680 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65  ialTypeLen(aType
10690 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  [i]);.      }els
106a0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  e{.        /* If
106b0 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20   i is less that 
106c0 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65  nField, then the
106d0 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c  re are less fiel
106e0 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20  ds in this.     
106f0 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61     ** record tha
10700 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  n SetNumColumns 
10710 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20  indicated there 
10720 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  are columns in t
10730 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61  he.        ** ta
10740 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66  ble. Set the off
10750 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72  set for any extr
10760 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72  a columns not pr
10770 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20  esent in.       
10780 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74   ** the record t
10790 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20  o 0. This tells 
107a0 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74  code below to st
107b0 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20  ore a NULL.     
107c0 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66     ** instead of
107d0 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61   deserializing a
107e0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
107f0 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20  record..        
10800 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  */.        aOffs
10810 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20  et[i] = 0;.     
10820 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
10830 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
10840 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73  se(&sMem);.    s
10850 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Mem.flags = MEM_
10860 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  Null;..    /* If
10870 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f   we have read mo
10880 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74  re header data t
10890 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65  han was containe
108a0 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c  d in the header,
108b0 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  .    ** or if th
108c0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
108d0 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
108e0 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65  to be past the e
108f0 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  nd of the.    **
10900 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74   record, or if t
10910 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
10920 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
10930 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68   to be before th
10940 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20  e end.    ** of 
10950 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e  the record (when
10960 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73   all fields pres
10970 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75  ent), then we mu
10980 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20  st be dealing . 
10990 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72     ** with a cor
109a0 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20  rupt database.. 
109b0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 49     */.    if( zI
109c0 64 78 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66  dx>zEndHdr || of
109d0 66 73 65 74 3e 70 61 79 6c 6f 61 64 53 69 7a 65  fset>payloadSize
109e0 20 0a 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d   .     || (zIdx=
109f0 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73  =zEndHdr && offs
10a00 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29  et!=payloadSize)
10a10 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
10a20 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
10a30 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
10a40 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10a50 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65    }.  }..  /* Ge
10a60 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66  t the column inf
10a70 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66  ormation. If aOf
10a80 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d  fset[p2] is non-
10a90 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  zero, then .  **
10aa0 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65   deserialize the
10ab0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
10ac0 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73  record. If aOffs
10ad0 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a  et[p2] is zero,.
10ae0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20    ** then there 
10af0 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66  are not enough f
10b00 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
10b10 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74  ord to satisfy t
10b20 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e  he.  ** request.
10b30 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
10b40 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55  set the value NU
10b50 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50  LL or to P4 if P
10b60 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e  4 is.  ** a poin
10b70 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a  ter to a Mem obj
10b80 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ect..  */.  if( 
10b90 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20  aOffset[p2] ){. 
10ba0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
10bb0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
10bc0 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
10bd0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10be0 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
10bf0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
10c00 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
10c10 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
10c20 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
10c30 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
10c40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10c50 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
10c60 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
10c70 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20  aType[p2]);.    
10c80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10c90 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
10ca0 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  t);.      rc = s
10cb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
10cc0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
10cd0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
10ce0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
10cf0 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
10d00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
10d10 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
10d20 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
10d30 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
10d40 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
10d50 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
10d60 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c  lGet((u8*)zData,
10d70 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73   aType[p2], pDes
10d80 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
10d90 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
10da0 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
10db0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
10dc0 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
10dd0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10de0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
10df0 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
10e00 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
10e10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10e20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66  assert( pDest->f
10e30 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  lags&MEM_Null );
10e40 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
10e50 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
10e60 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
10e70 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
10e80 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
10e90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
10ea0 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
10eb0 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
10ec0 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
10ed0 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
10ee0 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
10ef0 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
10f00 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
10f10 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
10f20 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
10f30 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
10f40 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
10f50 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
10f60 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
10f70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10f80 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
10f90 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
10fa0 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
10fb0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
10fc0 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
10fd0 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
10fe0 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
10ff0 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
11000 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
11010 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
11020 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
11030 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
11040 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
11050 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
11060 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
11070 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
11080 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
11090 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
110a0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
110b0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
110c0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
110d0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
110e0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
110f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11100 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
11110 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
11120 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
11130 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
11140 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
11150 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
11160 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
11170 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
11180 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
11190 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
111a0 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
111b0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
111c0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
111d0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
111e0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
111f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
11200 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
11210 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
11220 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
11230 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
11240 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 20 3d 20    Mem *pData0 = 
11250 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
11260 5d 3b 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 20  ];.  Mem *pLast 
11270 3d 20 26 70 44 61 74 61 30 5b 70 4f 70 2d 3e 70  = &pData0[pOp->p
11280 32 2d 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65  2-1];.  Mem *pRe
11290 63 3b 0a 0a 20 20 66 6f 72 28 70 52 65 63 3d 70  c;..  for(pRec=p
112a0 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
112b0 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
112c0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63   ExpandBlob(pRec
112d0 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
112e0 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
112f0 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
11300 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
11310 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11320 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
11330 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
11340 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  *.**.** Convert 
11350 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
11360 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
11370 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74  nto a single ent
11380 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66  ry.** suitable f
11390 6f 72 20 75 73 65 20 61 73 20 61 20 64 61 74 61  or use as a data
113a0 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
113b0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
113c0 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
113d0 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74   index.  The det
113e0 61 69 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ails of the form
113f0 61 74 20 61 72 65 20 69 72 72 65 6c 65 76 61 6e  at are irrelevan
11400 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20  t as long as.** 
11410 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
11420 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
11430 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
11440 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 73 6f  ..** Refer to so
11450 75 72 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e  urce code commen
11460 74 73 20 66 6f 72 20 74 68 65 20 64 65 74 61 69  ts for the detai
11470 6c 73 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ls of the record
11480 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a  .** format..**.*
11490 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
114a0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
114b0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
114c0 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
114d0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
114e0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
114f0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
11500 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
11510 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
11520 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
11530 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
11540 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
11550 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
11560 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
11570 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
11580 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
11590 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
115a0 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
115b0 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
115c0 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
115d0 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
115e0 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61  nity NONE..*/.ca
115f0 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
11600 3a 20 7b 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  : {.  /* Assumin
11610 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
11620 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
11630 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
11640 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
11650 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
11660 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
11670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11690 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
116a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
116b0 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
116c0 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
116d0 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
116e0 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
116f0 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
11700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11740 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
11750 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
11760 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
11770 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
11780 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
11790 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
117a0 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20  so froth..  **. 
117b0 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
117c0 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
117d0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
117e0 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
117f0 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
11800 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
11810 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
11820 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
11830 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
11840 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
11850 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
11860 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
11870 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
11880 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
11890 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
118a0 0a 20 20 2a 2f 0a 20 20 75 38 20 2a 7a 4e 65 77  .  */.  u8 *zNew
118b0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
118c0 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
118d0 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
118e0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
118f0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
11900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11910 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
11920 20 20 75 36 34 20 6e 44 61 74 61 20 3d 20 30 3b    u64 nData = 0;
11930 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11940 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
11950 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
11960 6e 74 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  nt nHdr = 0;    
11970 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11980 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
11990 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
119a0 34 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20  4 nByte = 0;    
119b0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
119c0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
119d0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
119e0 20 69 6e 74 20 6e 5a 65 72 6f 20 3d 20 30 3b 20   int nZero = 0; 
119f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11a00 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
11a10 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
11a20 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11a30 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
11a40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11a50 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
11a60 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
11a70 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
11a80 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
11a90 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
11aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
11ab0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
11ac0 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
11ad0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
11ae0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
11af0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
11b00 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
11b10 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
11b20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11b30 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
11b40 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
11b50 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
11b60 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
11b70 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
11b80 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
11b90 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
11ba0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
11bb0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
11bc0 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
11bd0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
11be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
11bf0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
11c00 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 0a 20 20 6e  Record[] */..  n
11c10 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
11c20 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
11c30 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
11c40 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
11c50 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
11c60 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
11c70 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 61 74 61 30  nMem );.  pData0
11c80 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 6e 46 69 65   = &p->aMem[nFie
11c90 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
11ca0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
11cb0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
11cc0 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
11cd0 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
11ce0 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
11cf0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
11d00 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
11d10 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
11d20 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
11d30 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
11d40 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
11d50 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
11d60 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
11d70 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
11d80 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
11d90 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 69 6e   pRec++){.    in
11da0 74 20 6c 65 6e 3b 0a 20 20 20 20 69 66 28 20 7a  t len;.    if( z
11db0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
11dc0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
11dd0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
11de0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
11df0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
11e00 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
11e10 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
11e20 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
11e30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11e40 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
11e50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
11e60 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
11e70 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
11e80 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
11e90 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
11ea0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
11eb0 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
11ec0 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
11ed0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
11ee0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
11ef0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
11f00 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
11f10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
11f20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
11f30 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
11f40 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
11f50 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
11f60 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
11f70 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
11f80 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
11f90 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
11fa0 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
11fb0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
11fc0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
11fd0 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
11fe0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
11ff0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
12000 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
12010 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
12020 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
12030 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
12040 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
12050 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
12060 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
12070 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
12080 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
12090 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
120a0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
120b0 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
120c0 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
120d0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
120e0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
120f0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
12100 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
12110 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
12120 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
12130 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
12140 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
12150 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
12160 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
12170 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
12180 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
12190 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
121a0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
121b0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
121c0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
121d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
121e0 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
121f0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
12200 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
12210 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
12220 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
12230 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
12240 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
12250 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
12260 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
12270 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
12280 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
12290 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
122a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
122b0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
122c0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
122d0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
122e0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
122f0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
12300 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66  cord, nHdr);.  f
12310 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
12320 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
12330 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c  c++){.    serial
12340 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
12350 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
12360 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
12370 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
12380 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
12390 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
123a0 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72  pe);      /* ser
123b0 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a  ial type */.  }.
123c0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
123d0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
123e0 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72  pRec++){  /* ser
123f0 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  ial data */.    
12400 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  i += sqlite3Vdbe
12410 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
12420 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28  ecord[i], (int)(
12430 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66  nByte-i), pRec,f
12440 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  ile_format);.  }
12450 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42  .  assert( i==nB
12460 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
12470 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
12480 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
12490 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
124a0 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
124b0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
124c0 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
124d0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
124e0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
124f0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
12500 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
12510 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
12520 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
12530 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
12540 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
12550 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
12560 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
12570 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
12580 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
12590 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
125a0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
125b0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
125c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  }../* Opcode: St
125d0 61 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a  atement P1 * * *
125e0 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61   *.**.** Begin a
125f0 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61  n individual sta
12600 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
12610 6f 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74  on which is part
12620 20 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20   of a larger.** 
12630 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
12640 69 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20  is is needed so 
12650 74 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65  that the stateme
12660 6e 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c  nt.** can be rol
12670 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
12680 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
12690 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
126a0 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
126b0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
126c0 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
126d0 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
126e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
126f0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
12700 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
12710 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12720 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
12730 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74  currently in aut
12740 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68  ocommit mode (th
12750 61 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  at .** is to say
12760 2c 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65  , if it is in be
12770 74 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20  tween BEGIN and 
12780 43 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69  COMMIT).** and i
12790 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f  f there are no o
127a0 74 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74  ther active stat
127b0 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61  ements on the sa
127c0 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
127d0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20  onnection, then 
127e0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  this operation i
127f0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73  s a no-op.  No s
12800 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
12810 74 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65  tion.** is neede
12820 64 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f  d since any erro
12830 72 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f  r can use the no
12840 72 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72  rmal ROLLBACK pr
12850 6f 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f  ocess to.** undo
12860 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20   changes..**.** 
12870 49 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  If a statement t
12880 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
12890 61 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74  arted, then a st
128a0 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20  atement journal 
128b0 66 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  file.** will be 
128c0 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e  allocated and in
128d0 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a  itialized..**.**
128e0 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   The statement i
128f0 73 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64  s begun on the d
12900 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74  atabase file wit
12910 68 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65  h index P1.  The
12920 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73   main.** databas
12930 65 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e  e file has an in
12940 64 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65  dex of 0 and the
12950 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
12960 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a  emporary tables.
12970 2a 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  ** has an index 
12980 6f 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of 1..*/.case OP
12990 5f 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20  _Statement: {.  
129a0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
129b0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
129c0 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
129d0 20 20 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d      int i = pOp-
129e0 3e 70 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a  >p1;.    Btree *
129f0 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
12a00 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
12a10 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
12a20 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
12a30 21 3d 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d  !=0 );.    pBt =
12a40 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
12a50 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
12a60 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
12a70 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61  ns(pBt) );.    a
12a80 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
12a90 4d 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d  Mask & (1<<i))!=
12aa0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71  0 );.    if( !sq
12ab0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 53 74  lite3BtreeIsInSt
12ac0 6d 74 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  mt(pBt) ){.     
12ad0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
12ae0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29  eeBeginStmt(pBt)
12af0 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65  ;.      p->opene
12b00 64 53 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a  dStatement = 1;.
12b10 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
12b20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12b30 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
12b40 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
12b50 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
12b60 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
12b70 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
12b80 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
12b90 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
12ba0 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
12bb0 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
12bc0 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
12bd0 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
12be0 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
12bf0 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
12c00 74 68 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  the COMMIT or RO
12c10 4c 4c 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74  LLBACK statement
12c20 20 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   fails..**.** Th
12c30 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
12c40 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
12c50 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
12c60 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
12c70 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
12c80 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
12c90 3b 0a 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63 6b  ;.  int rollback
12ca0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e   = pOp->p2;.  in
12cb0 74 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73  t turnOnAC = des
12cc0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
12cd0 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
12ce0 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64 65  t;..  assert( de
12cf0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
12d00 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
12d10 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
12d20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
12d30 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
12d40 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 0a  rollback==0 );..
12d50 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63    assert( db->ac
12d60 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b  tiveVdbeCnt>0 );
12d70 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
12d80 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
12d90 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75  ive */..  if( tu
12da0 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62 61  rnOnAC && rollba
12db0 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
12dc0 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
12dd0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
12de0 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
12df0 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
12e00 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
12e10 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
12e20 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
12e30 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
12e40 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
12e50 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
12e60 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
12e70 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
12e80 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
12e90 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
12ea0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
12eb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
12ec0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
12ed0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
12ee0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
12ef0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
12f00 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
12f10 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
12f20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
12f30 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   !rollback && db
12f40 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 31  ->writeVdbeCnt>1
12f50 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
12f60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
12f70 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
12f80 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
12f90 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
12fa0 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
12fb0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
12fc0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
12fd0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
12fe0 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
12ff0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
13000 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
13010 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d   db, "cannot com
13020 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
13030 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
13040 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
13050 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
13060 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
13070 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
13080 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
13090 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
130a0 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
130b0 32 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  2 ){.      asser
130c0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
130d0 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
130e0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
130f0 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64  All(db);.      d
13100 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
13110 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
13120 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
13130 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
13140 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
13150 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
13160 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
13170 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
13180 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
13190 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
131a0 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
131b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
131c0 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
131d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
131e0 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  Y;.        goto 
131f0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
13200 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
13210 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
13220 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
13230 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
13240 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13250 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
13260 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
13270 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
13280 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
13290 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
132a0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
132b0 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
132c0 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
132d0 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
132e0 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
132f0 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
13300 20 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b         (rollback
13310 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
13320 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
13330 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
13360 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
13370 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
13380 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
13390 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
133a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
133b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
133c0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
133d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
133e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
133f0 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
13400 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
13410 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
13420 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
13430 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
13440 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
13450 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
13460 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
13470 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
13480 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
13490 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
134a0 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
134b0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
134c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
134d0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
134e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
134f0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
13500 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
13510 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
13520 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
13530 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
13540 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
13550 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
13560 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
13570 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
13580 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
13590 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
135a0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
135b0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
135c0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
135d0 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
135e0 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
135f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13600 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
13610 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
13620 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
13630 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
13640 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
13650 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
13660 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
13670 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
13680 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
13690 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
136a0 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
136b0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
136c0 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
136d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
136e0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
136f0 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
13700 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
13710 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
13720 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20    If P2 is 2 or 
13730 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20  greater then an 
13740 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69  EXCLUSIVE lock i
13750 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a  s also obtained.
13760 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a  ** on the file..
13770 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  **.** If P2 is z
13780 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
13790 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  -lock is obtaine
137a0 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
137b0 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  e file..*/.case 
137c0 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
137d0 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
137e0 3e 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  >p1;.  Btree *pB
137f0 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  t;..  assert( i>
13800 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20  =0 && i<db->nDb 
13810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
13820 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
13830 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  <i))!=0 );.  pBt
13840 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
13850 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
13860 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
13870 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
13880 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  (pBt, pOp->p2);.
13890 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
138a0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
138b0 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
138c0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
138d0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
138e0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
138f0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
13900 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13910 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52   && rc!=SQLITE_R
13920 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63  EADONLY /* && rc
13930 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f  !=SQLITE_BUSY */
13940 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
13950 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
13960 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
13970 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13980 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
13990 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
139a0 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
139b0 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
139c0 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
139d0 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
139e0 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30  ter P2..** P3==0
139f0 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
13a00 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69  ersion.  P3==1 i
13a10 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
13a20 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20  ormat..** P3==2 
13a30 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
13a40 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
13a50 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
13a60 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
13a70 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
13a80 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
13a90 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
13aa0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
13ab0 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
13ac0 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49   tables..**.** I
13ad0 66 20 50 31 20 69 73 20 6e 65 67 61 74 69 76 65  f P1 is negative
13ae0 2c 20 74 68 65 6e 20 74 68 69 73 20 69 73 20 61  , then this is a
13af0 20 72 65 71 75 65 73 74 20 74 6f 20 72 65 61 64   request to read
13b00 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a   the size of a.*
13b10 2a 20 64 61 74 61 62 61 73 65 73 20 66 72 65 65  * databases free
13b20 2d 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62  -list. P3 must b
13b30 65 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68  e set to 1 in th
13b40 69 73 20 63 61 73 65 2e 20 54 68 65 20 61 63 74  is case. The act
13b50 75 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ual.** database 
13b60 61 63 63 65 73 73 65 64 20 69 73 20 28 28 50 31  accessed is ((P1
13b70 2b 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61  +1)*-1). For exa
13b80 6d 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d  mple, a P1 param
13b90 65 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f  eter of -1.** co
13ba0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74  rresponds to dat
13bb0 61 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29  abase 0 ("main")
13bc0 2c 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20  , a P1 of -2 is 
13bd0 64 61 74 61 62 61 73 65 20 31 20 28 22 74 65 6d  database 1 ("tem
13be0 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  p")..**.** There
13bf0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
13c00 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
13c10 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
13c20 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
13c30 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
13c40 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
13c50 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
13c60 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
13c70 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
13c80 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
13c90 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
13cb0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
13cc0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
13cd0 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
13ce0 70 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  p1;.  int iCooki
13cf0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20  e = pOp->p3;..  
13d00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
13d10 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
13d20 45 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62  ETA );.  if( iDb
13d30 3c 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20  <0 ){.    iDb = 
13d40 28 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20  (-1*(iDb+1));.  
13d50 20 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b    iCookie *= -1;
13d60 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69  .  }.  assert( i
13d70 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
13d80 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
13d90 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
13da0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
13db0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
13dc0 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
13dd0 29 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65  );.  /* The inde
13de0 78 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c  xing of meta val
13df0 75 65 73 20 61 74 20 74 68 65 20 73 63 68 65 6d  ues at the schem
13e00 61 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62  a layer is off b
13e10 79 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20  y one from.  ** 
13e20 74 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20  the indexing in 
13e30 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
13e40 20 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73    The btree cons
13e50 69 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f  iders meta[0] to
13e60 0a 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d  .  ** be the num
13e70 62 65 72 20 6f 66 20 66 72 65 65 20 70 61 67 65  ber of free page
13e80 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
13e90 65 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76  e (a read-only v
13ea0 61 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d  alue).  ** and m
13eb0 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65  eta[1] to be the
13ec0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20   schema cookie. 
13ed0 20 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65   The schema laye
13ee0 72 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a  r considers.  **
13ef0 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74   meta[1] to be t
13f00 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
13f10 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
13f20 20 73 68 69 66 74 20 74 68 65 20 69 6e 64 65 78   shift the index
13f30 0a 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20  .  ** by one in 
13f40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13f50 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  atement..  */.  
13f60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
13f70 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
13f80 5b 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69  [iDb].pBt, 1 + i
13f90 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
13fa0 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e  iMeta);.  pOut->
13fb0 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d  u.i = iMeta;.  M
13fc0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
13fd0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
13fe0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13ff0 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
14000 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
14010 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
14020 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
14030 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
14040 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
14050 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
14060 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
14070 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30  ase P1..** P2==0
14080 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
14090 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69  ersion.  P2==1 i
140a0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
140b0 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20  ormat..** P2==2 
140c0 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
140d0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
140e0 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
140f0 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
14100 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
14110 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
14120 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
14130 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
14140 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
14150 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   tables..**.** A
14160 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
14170 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
14180 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68  ore executing th
14190 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
141a0 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a  se OP_SetCookie:
141b0 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20   {       /* in3 
141c0 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  */.  Db *pDb;.  
141d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
141e0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
141f0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
14200 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
14210 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
14220 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
14230 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
14240 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
14250 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
14260 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
14270 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
14280 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
14290 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
142a0 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e  In3);.  /* See n
142b0 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
142c0 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
142d0 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
142e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
142f0 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
14300 70 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20  pBt, 1+pOp->p2, 
14310 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
14320 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
14330 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  0 ){.    /* When
14340 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
14350 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
14360 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
14370 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
14380 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
14390 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
143a0 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
143b0 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
143c0 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
143d0 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
143e0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20   if( pOp->p2==1 
143f0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
14400 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
14410 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
14420 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
14430 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
14440 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
14450 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
14460 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
14470 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
14480 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
14490 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
144a0 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
144b0 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
144c0 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
144d0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
144e0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
144f0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
14500 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
14510 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79  * Opcode: Verify
14520 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a  Cookie P1 P2 *.*
14530 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
14540 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64  alue of global d
14550 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65  atabase paramete
14560 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a  r number 0 (the.
14570 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  ** schema versio
14580 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65  n) and make sure
14590 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20   it is equal to 
145a0 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74  P2.  .** P1 is t
145b0 68 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62  he database numb
145c0 65 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f  er which is 0 fo
145d0 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
145e0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  ase file.** and 
145f0 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68  1 for the file h
14600 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  olding temporary
14610 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65   tables and some
14620 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a   higher number.*
14630 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20  * for auxiliary 
14640 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
14650 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
14660 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
14670 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
14680 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
14690 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
146a0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
146b0 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
146c0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
146d0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
146e0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
146f0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
14700 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
14710 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65  ema..**.** Eithe
14720 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  r a transaction 
14730 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65  needs to have be
14740 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e  en started or an
14750 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a   OP_Open needs.*
14760 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  * to be executed
14770 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61   (to establish a
14780 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f   read lock) befo
14790 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  re this opcode i
147a0 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f  s.** invoked..*/
147b0 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43  .case OP_VerifyC
147c0 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69  ookie: {.  int i
147d0 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70  Meta;.  Btree *p
147e0 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Bt;.  assert( pO
147f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
14800 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
14810 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
14820 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
14830 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
14840 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
14850 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28  ->p1].pBt;.  if(
14860 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
14870 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
14880 4d 65 74 61 28 70 42 74 2c 20 31 2c 20 28 75 33  Meta(pBt, 1, (u3
14890 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
148a0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53  else{.    rc = S
148b0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d  QLITE_OK;.    iM
148c0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
148d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
148e0 20 26 26 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e   && iMeta!=pOp->
148f0 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p2 ){.    sqlite
14900 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
14910 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
14920 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
14930 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
14940 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
14950 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
14960 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
14970 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
14980 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14990 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
149a0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
149b0 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
149c0 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
149d0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
149e0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
149f0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
14a00 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
14a10 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
14a20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
14a30 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
14a40 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
14a50 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
14a60 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
14a70 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
14a80 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
14a90 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
14aa0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
14ab0 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
14ac0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
14ad0 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
14ae0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
14af0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
14b00 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
14b10 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
14b20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
14b30 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
14b40 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
14b50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
14b60 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
14b70 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
14b80 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
14b90 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
14ba0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
14bb0 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
14bc0 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
14bd0 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
14be0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
14bf0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
14c00 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
14c10 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
14c20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
14c30 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
14c40 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
14c50 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
14c60 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
14c70 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
14c80 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
14c90 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
14ca0 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  p1);.    }..    
14cb0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14cc0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
14cd0 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  db);.    rc = SQ
14ce0 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
14cf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14d00 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
14d10 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
14d20 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
14d30 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
14d40 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
14d50 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
14d60 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
14d70 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
14d80 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
14d90 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
14da0 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
14db0 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
14dc0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
14dd0 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
14de0 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
14df0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
14e00 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
14e10 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
14e20 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
14e30 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
14e40 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
14e50 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
14e60 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
14e70 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
14e80 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
14e90 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
14ea0 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
14eb0 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
14ec0 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
14ed0 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
14ee0 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
14ef0 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
14f00 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14f10 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
14f20 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
14f30 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
14f40 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
14f50 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
14f60 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
14f70 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
14f80 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
14f90 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
14fa0 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
14fb0 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
14fc0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
14fd0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
14fe0 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
14ff0 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
15000 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
15010 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
15020 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
15030 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
15040 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
15050 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
15060 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
15070 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
15080 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
15090 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
150a0 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
150b0 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
150c0 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
150d0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
150e0 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
150f0 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
15100 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
15110 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
15120 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
15130 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
15140 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
15150 50 34 20 76 61 6c 75 65 20 69 73 20 61 20 70 6f  P4 value is a po
15160 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
15170 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
15180 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a 2a 2a  t defines the.**
15190 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
151a0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
151b0 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50 34 20  of indices.  P4 
151c0 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75 72 73  is NULL for curs
151d0 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  ors.** that are 
151e0 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  not pointing to 
151f0 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  indices..**.** S
15200 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74  ee also OpenWrit
15210 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
15220 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
15230 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
15240 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
15250 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
15260 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
15270 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
15280 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
15290 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
152a0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
152b0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
152c0 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
152d0 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
152e0 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 61 20  e P4 value is a 
152f0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
15300 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
15310 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a  hat defines the.
15320 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  ** content and c
15330 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
15340 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50  e of indices.  P
15350 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75  4 is NULL for cu
15360 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72  rsors.** that ar
15370 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74  e not pointing t
15380 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a  o indices..**.**
15390 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
153a0 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
153b0 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
153c0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
153d0 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
153e0 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
153f0 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
15400 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
15410 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
15420 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
15430 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
15440 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
15450 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
15460 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
15470 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
15480 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
15490 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
154a0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
154b0 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d  ->p1;.  int p2 =
154c0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20   pOp->p2;.  int 
154d0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
154e0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
154f0 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
15500 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
15510 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61 73  Db *pDb;.  .  as
15520 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
15530 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
15540 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
15550 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
15560 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
15570 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
15580 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
15590 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
155a0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
155b0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
155c0 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
155d0 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  g = 1;.    if( p
155e0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
155f0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
15600 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15610 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
15620 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
15630 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
15640 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
15650 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15660 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
15670 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
15680 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
15690 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
156a0 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
156b0 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61      pIn2 = &p->a
156c0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c  Mem[p2];.    sql
156d0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
156e0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
156f0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
15700 3e 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 32  >u.i;.    if( p2
15710 3c 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  <2 ) {.      rc 
15720 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
15730 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
15740 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15750 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
15760 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
15770 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
15780 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20  ateCursor(p, i, 
15790 26 70 4f 70 5b 2d 31 5d 2c 20 69 44 62 2c 20 31  &pOp[-1], iDb, 1
157a0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
157b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
157c0 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
157d0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
157e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
157f0 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
15800 4f 70 2d 3e 70 34 2e 70 2c 20 70 43 75 72 2d 3e  Op->p4.p, pCur->
15810 70 43 75 72 73 6f 72 29 3b 0a 20 20 69 66 28 20  pCursor);.  if( 
15820 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
15830 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
15840 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
15850 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
15860 3b 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79  ;.    pCur->pKey
15870 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
15880 70 2d 3e 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  p->db);.  }else{
15890 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  .    pCur->pKeyI
158a0 6e 66 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73  nfo = 0;.  }.  s
158b0 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
158c0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
158d0 59 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y: {.      p->pc
158e0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
158f0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15900 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
15910 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15920 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
15930 4c 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20  LITE_OK: {.     
15940 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 73 71 6c   int flags = sql
15950 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
15960 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
15970 20 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63       /* Sanity c
15980 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74  hecking.  Only t
15990 68 65 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69  he lower four bi
159a0 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ts of the flags 
159b0 62 79 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20  byte should.    
159c0 20 20 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42    ** be used.  B
159d0 69 74 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29  it 3 (mask 0x08)
159e0 20 69 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c   is unpredictabl
159f0 65 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20  e.  The lower 3 
15a00 62 69 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d  bits.      ** (m
15a10 61 73 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64  ask 0x07) should
15a20 20 62 65 20 65 69 74 68 65 72 20 35 20 28 69 6e   be either 5 (in
15a30 74 6b 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f  tkey+leafdata fo
15a40 72 20 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20  r tables) or.   
15a50 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74     ** 2 (zerodat
15a60 61 20 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20  a for indices). 
15a70 20 49 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74   If these condit
15a80 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74  ions are not met
15a90 20 69 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a   it can.      **
15aa0 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20   only mean that 
15ab0 77 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77  we are dealing w
15ac0 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
15ad0 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20  tabase file.    
15ae0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15af0 66 6c 61 67 73 20 26 20 30 78 66 30 29 21 3d 30  flags & 0xf0)!=0
15b00 20 7c 7c 20 28 28 66 6c 61 67 73 20 26 20 30 78   || ((flags & 0x
15b10 30 37 29 21 3d 35 20 26 26 20 28 66 6c 61 67 73  07)!=5 && (flags
15b20 20 26 20 30 78 30 37 29 21 3d 32 29 20 29 7b 0a   & 0x07)!=2) ){.
15b30 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
15b40 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
15b50 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
15b60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15b70 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
15b80 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
15b90 20 28 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f   (flags & BTREE_
15ba0 49 4e 54 4b 45 59 29 21 3d 30 20 3f 31 3a 30 3b  INTKEY)!=0 ?1:0;
15bb0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49  .      pCur->isI
15bc0 6e 64 65 78 20 3d 20 28 66 6c 61 67 73 20 26 20  ndex = (flags & 
15bd0 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 21  BTREE_ZERODATA)!
15be0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 2f  =0 ?1:0;.      /
15bf0 2a 20 49 66 20 50 34 3d 3d 30 20 69 74 20 6d 65  * If P4==0 it me
15c00 61 6e 73 20 77 65 20 61 72 65 20 65 78 70 65 63  ans we are expec
15c10 74 65 64 20 74 6f 20 6f 70 65 6e 20 61 20 74 61  ted to open a ta
15c20 62 6c 65 2e 20 20 49 66 20 50 34 21 3d 30 20 74  ble.  If P4!=0 t
15c30 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77 65 20  hen.      ** we 
15c40 65 78 70 65 63 74 20 74 6f 20 62 65 20 6f 70 65  expect to be ope
15c50 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e 20 20  ning an index.  
15c60 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 77  If this is not w
15c70 68 61 74 20 68 61 70 70 65 6e 65 64 2c 0a 20 20  hat happened,.  
15c80 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
15c90 64 61 74 61 62 61 73 65 20 69 73 20 63 6f 72 72  database is corr
15ca0 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  upt.      */.   
15cb0 20 20 20 69 66 28 20 28 70 43 75 72 2d 3e 69 73     if( (pCur->is
15cc0 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34  Table && pOp->p4
15cd0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
15ce0 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 70 43 75  ).       || (pCu
15cf0 72 2d 3e 69 73 49 6e 64 65 78 20 26 26 20 70 4f  r->isIndex && pO
15d00 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
15d10 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20 20 20  YINFO) ){.      
15d20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
15d30 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
15d40 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15d50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15d60 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
15d70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
15d80 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b   SQLITE_EMPTY: {
15d90 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54  .      pCur->isT
15da0 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
15db0 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
15dc0 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e        pCur->isIn
15dd0 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54  dex = !pCur->isT
15de0 61 62 6c 65 3b 0a 20 20 20 20 20 20 70 43 75 72  able;.      pCur
15df0 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  ->pCursor = 0;. 
15e00 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15e10 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  _OK;.      break
15e20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61  ;.    }.    defa
15e30 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74  ult: {.      got
15e40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15e50 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
15e60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15e70 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
15e80 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
15e90 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
15ea0 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
15eb0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
15ec0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
15ed0 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
15ee0 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
15ef0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
15f00 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
15f10 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72  ad-only.  The tr
15f20 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75  ansient or virtu
15f30 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
15f40 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
15f50 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
15f60 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
15f70 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
15f80 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
15f90 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
15fa0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
15fb0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
15fc0 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
15fd0 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
15fe0 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
15ff0 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
16000 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
16010 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
16020 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
16030 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
16040 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
16050 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
16060 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
16070 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
16080 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
16090 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
160a0 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
160b0 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
160c0 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
160d0 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
160e0 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
160f0 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
16100 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
16110 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
16120 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
16130 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
16140 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
16150 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
16160 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
16170 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
16180 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
16190 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65  le idea..*/.case
161a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
161b0 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  l: {.  int i = p
161c0 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
161d0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61  rsor *pCx;.  sta
161e0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70  tic const int op
161f0 65 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  enFlags = .     
16200 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
16210 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
16220 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
16230 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
16240 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
16250 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
16260 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
16270 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
16280 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
16290 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  DB;..  assert( i
162a0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
162b0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
162c0 20 69 2c 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b   i, pOp, -1, 1);
162d0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
162e0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
162f0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
16300 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
16310 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
16320 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46  0, 1, SQLITE_DEF
16330 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f  AULT_TEMP_CACHE_
16340 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  SIZE, openFlags,
16350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16360 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78              &pCx
16370 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ->pBt);.  if( rc
16380 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
16390 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
163a0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
163b0 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
163c0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
163d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
163e0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
163f0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
16400 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
16410 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
16420 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
16430 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
16440 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66  BTREE_ZERODATA f
16450 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
16460 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
16470 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
16480 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
16490 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
164a0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
164b0 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
164c0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
164d0 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c   (an INTKEY tabl
164e0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
164f0 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49  f( pOp->p4.pKeyI
16500 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  nfo ){.      int
16510 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
16520 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
16530 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
16540 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16550 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
16560 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
16570 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  no, BTREE_ZERODA
16580 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  TA); .      if( 
16590 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
165a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
165b0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
165c0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
165d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
165e0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
165f0 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
16620 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
16630 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
16640 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
16650 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
16660 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
16670 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
16680 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
16690 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
166a0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
166b0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
166c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
166d0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
166e0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
166f0 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
16700 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
16710 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
16720 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
16730 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
16740 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
16750 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16760 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
16770 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70  2 * * *.**.** Op
16780 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
16790 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
167a0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
167b0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
167c0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
167d0 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20  a.  Any attempt 
167e0 74 6f 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e  to write a secon
167f0 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61  d row of data ca
16800 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73  uses the.** firs
16810 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65  t row to be dele
16820 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69  ted.  All data i
16830 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74  s deleted when t
16840 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
16850 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
16860 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
16870 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
16880 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f  ode is useful fo
16890 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a  r holding the.**
168a0 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c   NEW or OLD tabl
168b0 65 73 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e  es in a trigger.
168c0 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68    Also used to h
168d0 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65  old the a single
168e0 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
168f0 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
16900 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
16910 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
16920 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
16930 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
16940 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
16950 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  opcode..**.** Wh
16960 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  en OP_Insert is 
16970 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65  executed to inse
16980 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74  rt a row in to t
16990 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c  he pseudo table,
169a0 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
169b0 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20  able cursor may 
169c0 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20  or may not make 
169d0 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66  it's own copy of
169e0 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
169f0 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32   row data. If P2
16a00 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20   is 0, then the 
16a10 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c  pseudo-table wil
16a20 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72  l copy the.** or
16a30 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e  iginal row data.
16a40 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f   Otherwise, a po
16a50 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69  inter to the ori
16a60 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c  ginal memory cel
16a70 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20  l.** is stored. 
16a80 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
16a90 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d  e vdbe program m
16aa0 75 73 74 20 65 6e 73 75 72 65 20 74 68 61 74 20  ust ensure that 
16ab0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63  the .** memory c
16ac0 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ell containing t
16ad0 68 65 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e  he row data is n
16ae0 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75  ot overwritten u
16af0 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75  ntil the.** pseu
16b00 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  do table is clos
16b10 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77  ed (or a new row
16b20 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
16b30 6f 20 69 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  o it)..*/.case O
16b40 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
16b50 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
16b60 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
16b70 2a 70 43 78 3b 0a 20 20 61 73 73 65 72 74 28 20  *pCx;.  assert( 
16b80 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  i>=0 );.  pCx = 
16b90 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
16ba0 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d  , i, &pOp[-1], -
16bb0 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
16bc0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
16bd0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
16be0 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
16bf0 65 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20  eudoTable = 1;. 
16c00 20 70 43 78 2d 3e 65 70 68 65 6d 50 73 65 75 64   pCx->ephemPseud
16c10 6f 54 61 62 6c 65 20 3d 20 28 75 38 29 70 4f 70  oTable = (u8)pOp
16c20 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
16c30 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d  able = 1;.  pCx-
16c40 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20  >isIndex = 0;.  
16c50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16c60 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
16c70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
16c80 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
16c90 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
16ca0 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
16cb0 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
16cc0 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
16cd0 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
16ce0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
16cf0 73 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  se: {.  int i = 
16d00 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
16d10 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
16d20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
16d30 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
16d40 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69  or(p, p->apCsr[i
16d50 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 69  ]);.  p->apCsr[i
16d60 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
16d70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
16d80 76 65 47 65 20 50 31 20 50 32 20 50 33 20 50 34  veGe P1 P2 P3 P4
16d90 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
16da0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
16db0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
16dc0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
16dd0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
16de0 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65  * use the intege
16df0 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
16e00 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
16e10 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
16e20 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
16e30 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
16e40 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
16e50 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
16e60 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
16e70 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
16e80 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
16e90 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
16ea0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
16eb0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
16ec0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
16ed0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
16ee0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
16ef0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
16f00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
16f10 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
16f20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
16f30 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
16f40 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
16f50 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
16f60 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
16f70 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 70 65 63 69 61  ..**.** A specia
16f80 6c 20 66 65 61 74 75 72 65 20 6f 66 20 74 68 69  l feature of thi
16f90 73 20 6f 70 63 6f 64 65 20 28 61 6e 64 20 64 69  s opcode (and di
16fa0 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
16fb0 0a 2a 2a 20 72 65 6c 61 74 65 64 20 4f 50 5f 4d  .** related OP_M
16fc0 6f 76 65 47 74 2c 20 4f 50 5f 4d 6f 76 65 4c 74  oveGt, OP_MoveLt
16fd0 2c 20 61 6e 64 20 4f 50 5f 4d 6f 76 65 4c 65 29  , and OP_MoveLe)
16fe0 20 69 73 20 74 68 61 74 20 69 66 20 50 32 20 69   is that if P2 i
16ff0 73 0a 2a 2a 20 7a 65 72 6f 20 61 6e 64 20 50 31  s.** zero and P1
17000 20 69 73 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   is an SQL table
17010 20 28 61 20 62 2d 74 72 65 65 20 77 69 74 68 20   (a b-tree with 
17020 69 6e 74 65 67 65 72 20 6b 65 79 73 29 20 74 68  integer keys) th
17030 65 6e 0a 2a 2a 20 74 68 65 20 73 65 65 6b 20 69  en.** the seek i
17040 73 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c  s deferred until
17050 20 69 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20   it is actually 
17060 6e 65 65 64 65 64 2e 20 20 49 74 20 6d 69 67 68  needed.  It migh
17070 74 20 62 65 0a 2a 2a 20 74 68 65 20 63 61 73 65  t be.** the case
17080 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
17090 20 69 73 20 6e 65 76 65 72 20 61 63 63 65 73 73   is never access
170a0 65 64 2e 20 20 42 79 20 64 65 66 65 72 72 69 6e  ed.  By deferrin
170b0 67 20 74 68 65 0a 2a 2a 20 73 65 65 6b 2c 20 77  g the.** seek, w
170c0 65 20 61 76 6f 69 64 20 75 6e 6e 65 63 65 73 73  e avoid unnecess
170d0 61 72 79 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a  ary seeks..**.**
170e0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
170f0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
17100 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20 4d 6f  inct, MoveLt, Mo
17110 76 65 47 74 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a  veGt, MoveLe.*/.
17120 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 47  /* Opcode: MoveG
17130 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
17140 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
17150 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
17160 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
17170 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
17180 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
17190 73 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  se the integer v
171a0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
171b0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
171c0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
171d0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
171e0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
171f0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
17200 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
17210 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
17220 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
17230 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
17240 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
17250 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
17260 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
17270 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
17280 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
17290 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
172a0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
172b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
172c0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
172d0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
172e0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
172f0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
17300 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
17310 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
17320 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
17330 2c 20 4d 6f 76 65 4c 74 2c 20 4d 6f 76 65 47 65  , MoveLt, MoveGe
17340 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , MoveLe.*/./* O
17350 70 63 6f 64 65 3a 20 4d 6f 76 65 4c 74 20 50 31  pcode: MoveLt P1
17360 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a   P2 P3 P4 * .**.
17370 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
17380 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
17390 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
173a0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
173b0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
173c0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
173d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
173e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
173f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
17400 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
17410 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
17420 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
17430 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
17440 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
17450 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
17460 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
17470 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
17480 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
17490 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
174a0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
174b0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
174c0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
174d0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
174e0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
174f0 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
17500 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
17510 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
17520 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
17530 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
17540 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
17550 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74 2c 20  stinct, MoveGt, 
17560 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a  MoveGe, MoveLe.*
17570 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  /./* Opcode: Mov
17580 65 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  eLe P1 P2 P3 P4 
17590 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
175a0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
175b0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
175c0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
175d0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
175e0 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65 72   use the integer
175f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
17600 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
17610 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
17620 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
17630 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
17640 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
17650 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
17660 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
17670 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
17680 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
17690 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
176a0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
176b0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
176c0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
176d0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
176e0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
176f0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
17700 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
17710 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
17720 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
17730 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
17740 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
17750 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
17760 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
17770 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
17780 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
17790 63 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65  ct, MoveGt, Move
177a0 47 65 2c 20 4d 6f 76 65 4c 74 0a 2a 2f 0a 63 61  Ge, MoveLt.*/.ca
177b0 73 65 20 4f 50 5f 4d 6f 76 65 4c 74 3a 20 20 20  se OP_MoveLt:   
177c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
177d0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  n3 */.case OP_Mo
177e0 76 65 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  veLe:         /*
177f0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
17800 73 65 20 4f 50 5f 4d 6f 76 65 47 65 3a 20 20 20  se OP_MoveGe:   
17810 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
17820 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  n3 */.case OP_Mo
17830 76 65 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  veGt: {       /*
17840 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
17850 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
17860 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
17870 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  C;..  assert( i>
17880 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
17890 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
178a0 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
178b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
178c0 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  f( pC->pCursor!=
178d0 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  0 ){.    int res
178e0 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20 70  , oc;.    oc = p
178f0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20  Op->opcode;.    
17900 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
17910 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54  .    if( pC->isT
17920 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 69 36  able ){.      i6
17930 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
17940 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
17950 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  3);.      if( pO
17960 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
17970 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17980 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f 76 65  >opcode==OP_Move
17990 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  Ge );.        pC
179a0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
179b0 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20 20 70   iKey;.        p
179c0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
179d0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  = 0;.        pC-
179e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
179f0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
17a00 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
17a10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17a20 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
17a30 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
17a40 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
17a50 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
17a60 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17a70 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
17a80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a90 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
17aa0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
17ab0 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 70 43 2d   iKey;.      pC-
17ac0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17ad0 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
17ae0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 55 6e   }else{.      Un
17af0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
17b00 20 20 20 20 20 20 69 6e 74 20 6e 46 69 65 6c 64        int nField
17b10 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
17b20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17b30 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
17b40 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
17b50 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
17b60 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20       r.pKeyInfo 
17b70 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
17b80 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d        r.nField =
17b90 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20   (u16)nField;.  
17ba0 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 4d      if( oc==OP_M
17bb0 6f 76 65 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  oveGt || oc==OP_
17bc0 4d 6f 76 65 4c 65 20 29 7b 0a 20 20 20 20 20 20  MoveLe ){.      
17bd0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
17be0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20  CKED_INCRKEY;.  
17bf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17c00 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a     r.flags = 0;.
17c10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e        }.      r.
17c20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  aMem = &p->aMem[
17c30 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
17c40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17c50 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
17c60 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c  pC->pCursor, &r,
17c70 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
17c80 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17c90 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
17ca0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17cb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17cc0 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  }.      pC->rowi
17cd0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
17ce0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
17cf0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
17d00 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
17d10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
17d20 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
17d30 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
17d40 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
17d50 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
17d60 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 65 20 7c   oc==OP_MoveGe |
17d70 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20  | oc==OP_MoveGt 
17d80 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  ){.      if( res
17d90 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  <0 ){.        rc
17da0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
17db0 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ext(pC->pCursor,
17dc0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
17dd0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17de0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17df0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
17e00 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
17e10 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
17e20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17e30 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  res = 0;.      }
17e40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17e50 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
17e60 5f 4d 6f 76 65 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _MoveLt || oc==O
17e70 50 5f 4d 6f 76 65 4c 65 20 29 3b 0a 20 20 20 20  P_MoveLe );.    
17e80 20 20 69 66 28 20 72 65 73 3e 3d 30 20 29 7b 0a    if( res>=0 ){.
17e90 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17ea0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
17eb0 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  s(pC->pCursor, &
17ec0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
17ed0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17ee0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
17ef0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
17f00 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
17f10 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
17f20 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
17f30 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
17f40 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
17f50 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
17f60 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
17f70 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
17f80 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
17f90 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
17fa0 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
17fb0 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43  3BtreeEof(pC->pC
17fc0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  ursor);.      }.
17fd0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
17fe0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
17ff0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
18000 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
18010 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
18020 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65  lse if( !pC->pse
18030 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
18040 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
18050 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20  when attempting 
18060 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69  to open the sqli
18070 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  te3_master table
18080 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64  .    ** for read
18090 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20   access returns 
180a0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e  SQLITE_EMPTY. In
180b0 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79   this case alway
180c0 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68  s.    ** take th
180d0 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68  e jump (since th
180e0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
180f0 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29  ds in the table)
18100 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20  ..    */.    pc 
18110 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
18120 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18130 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
18140 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
18150 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68  ** Register P3 h
18160 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
18170 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
18180 65 63 6f 72 64 2e 20 20 50 31 20 69 73 20 61 6e  ecord.  P1 is an
18190 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e   index..** If an
181a0 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
181b0 68 65 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e  hes the value in
181c0 20 72 65 67 69 73 74 65 72 20 70 33 20 65 78 69   register p3 exi
181d0 73 74 73 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a  sts in P1 then.*
181e0 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
181f0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 64  f the P3 value d
18200 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
18210 79 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a  y entry in P1.**
18220 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
18230 20 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20    The P1 cursor 
18240 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
18250 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
18260 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74 20   entry.** if it 
18270 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
18280 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
18290 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
182a0 65 6e 74 20 74 68 65 20 49 4e 20 6f 70 65 72 61  ent the IN opera
182b0 74 6f 72 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  tor where the.**
182c0 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
182d0 69 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  is a SELECT stat
182e0 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79 20 62  ement.  P1 may b
182f0 65 20 61 20 74 72 75 65 20 69 6e 64 65 78 2c 20  e a true index, 
18300 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20  or it.** may be 
18310 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
18320 78 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  x that holds the
18330 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
18340 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d  SELECT.** statem
18350 65 6e 74 2e 20 20 20 54 68 69 73 20 69 6e 73 74  ent.   This inst
18360 72 75 63 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ruction is also 
18370 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
18380 74 20 74 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43  t the.** DISTINC
18390 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 53 45 4c  T keyword in SEL
183a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
183b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
183c0 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
183d0 20 69 6e 64 65 78 20 50 31 20 63 6f 6e 74 61 69   index P1 contai
183e0 6e 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72 20  ns a record for 
183f0 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 66 69  which .** the fi
18400 72 73 74 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  rst N serialized
18410 20 76 61 6c 75 65 73 20 65 78 61 63 74 6c 79 20   values exactly 
18420 6d 61 74 63 68 20 74 68 65 20 4e 20 73 65 72 69  match the N seri
18430 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a  alized values.**
18440 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
18450 6e 20 72 65 67 69 73 74 65 72 20 50 33 2c 20 77  n register P3, w
18460 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 74 6f  here N is the to
18470 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  tal number of va
18480 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50  lues in.** the P
18490 33 20 72 65 63 6f 72 64 20 28 74 68 65 20 50 33  3 record (the P3
184a0 20 72 65 63 6f 72 64 20 69 73 20 61 20 70 72 65   record is a pre
184b0 66 69 78 20 6f 66 20 74 68 65 20 50 31 20 72 65  fix of the P1 re
184c0 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65  cord). .**.** Se
184d0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
184e0 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45  , IsUnique, NotE
184f0 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  xists.*/./* Opco
18500 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
18510 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
18520 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  Register P3 hold
18530 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
18540 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
18550 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e  rd.  P1 is.** an
18560 20 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f 20 65   index.  If no e
18570 6e 74 72 79 20 65 78 69 73 74 73 20 69 6e 20 50  ntry exists in P
18580 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  1 that matches t
18590 68 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d  he blob then jum
185a0 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49 66 20  p.** to P2.  If 
185b0 61 6e 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78  an entry does ex
185c0 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72  isting, fall thr
185d0 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
185e0 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69  r is left.** poi
185f0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 65 6e 74  nting to the ent
18600 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 2e  ry that matches.
18610 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
18620 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
18630 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
18640 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
18650 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
18660 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
18670 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
18680 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
18690 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
186a0 3b 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  ;.  int alreadyE
186b0 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 56 64 62  xists = 0;.  Vdb
186c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
186d0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
186e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
186f0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
18700 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
18710 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
18720 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20  i])->pCursor!=0 
18730 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
18740 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
18750 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 0a 20 20  rd *pIdxKey;..  
18760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
18770 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
18780 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
18790 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
187a0 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  ;.    pIdxKey = 
187b0 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
187c0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
187d0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
187e0 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20  In3->z,.        
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54                aT
18810 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
18820 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69  TempRec));.    i
18830 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b  f( pIdxKey==0 ){
18840 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
18850 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  em;.    }.    if
18860 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
18870 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20  P_Found ){.     
18880 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20   pIdxKey->flags 
18890 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  |= UNPACKED_PREF
188a0 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
188b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
188c0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
188d0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
188e0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
188f0 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69 74  &res);.    sqlit
18900 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61  e3VdbeDeleteUnpa
18910 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b  ckedRecord(pIdxK
18920 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  ey);.    if( rc!
18930 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18940 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
18950 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
18960 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
18970 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
18980 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
18990 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
189a0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
189b0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
189c0 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
189d0 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
189e0 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
189f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
18a00 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
18a10 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
18a20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
18a30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18a40 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
18a50 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
18a60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
18a70 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
18a80 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
18a90 64 20 6e 75 6d 62 65 72 2e 20 20 43 61 6c 6c 20  d number.  Call 
18aa0 74 68 69 73 0a 2a 2a 20 72 65 63 6f 72 64 20 6e  this.** record n
18ab0 75 6d 62 65 72 20 52 2e 20 20 54 68 65 20 50 34  umber R.  The P4
18ac0 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
18ad0 6e 73 20 61 6e 20 69 6e 64 65 78 20 6b 65 79 20  ns an index key 
18ae0 63 72 65 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  created.** using
18af0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 43 61   MakeRecord.  Ca
18b00 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50  ll it K..**.** P
18b10 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 20 20  1 is an index.  
18b20 53 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74  So it has no dat
18b30 61 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f  a and its key co
18b40 6e 73 69 73 74 73 20 6f 66 20 61 0a 2a 2a 20 72  nsists of a.** r
18b50 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64 20  ecord generated 
18b60 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  by OP_MakeRecord
18b70 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74 20   where the last 
18b80 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a  field is the .**
18b90 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65 6e   rowid of the en
18ba0 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64  try that the ind
18bb0 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ex refers to..**
18bc0 20 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75   .** This instru
18bd0 63 74 69 6f 6e 20 61 73 6b 73 20 69 66 20 74 68  ction asks if th
18be0 65 72 65 20 69 73 20 61 6e 20 65 6e 74 72 79 20  ere is an entry 
18bf0 69 6e 20 50 31 20 77 68 65 72 65 20 74 68 65 0a  in P1 where the.
18c00 2a 2a 20 66 69 65 6c 64 73 20 6d 61 74 63 68 65  ** fields matche
18c10 73 20 4b 20 62 75 74 20 74 68 65 20 72 6f 77 69  s K but the rowi
18c20 64 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  d is different f
18c30 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20 74 68 65  rom R..** If the
18c40 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
18c50 74 72 79 2c 20 74 68 65 6e 20 74 68 65 72 65 20  try, then there 
18c60 69 73 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a  is an immediate.
18c70 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
18c80 49 66 20 61 6e 79 20 65 6e 74 72 79 20 64 6f 65  If any entry doe
18c90 73 20 65 78 69 73 74 20 77 68 65 72 65 20 74 68  s exist where th
18ca0 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 0a 2a  e index string.*
18cb0 2a 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20  * matches K but 
18cc0 74 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  the record numbe
18cd0 72 20 69 73 20 6e 6f 74 20 52 2c 20 74 68 65 6e  r is not R, then
18ce0 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 6e   the record.** n
18cf0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 65  umber for that e
18d00 6e 74 72 79 20 69 73 20 77 72 69 74 74 65 6e 20  ntry is written 
18d10 69 6e 74 6f 20 50 33 20 61 6e 64 20 63 6f 6e 74  into P3 and cont
18d20 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
18d30 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
18d40 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
18d50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
18d60 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74  tFound, NotExist
18d70 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65  s, Found.*/.case
18d80 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20   OP_IsUnique: { 
18d90 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
18da0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
18db0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
18dc0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
18dd0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
18de0 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34    Mem *pK;.  i64
18df0 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68   R;..  /* Pop th
18e00 65 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68  e value R off th
18e10 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
18e20 63 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ck.  */.  assert
18e30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
18e40 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
18e50 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
18e60 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
18e70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d  ->nMem );.  pK =
18e80 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
18e90 34 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  4.i];.  sqlite3V
18ea0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
18eb0 28 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49  (pIn3);.  R = pI
18ec0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72  n3->u.i;.  asser
18ed0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
18ee0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78  nCursor );.  pCx
18ef0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
18f00 20 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30    assert( pCx!=0
18f10 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
18f20 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  x->pCursor;.  if
18f30 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
18f40 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69    int res;.    i
18f50 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
18f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18f70 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74   record number t
18f80 68 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f  hat matches K */
18f90 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63  .    UnpackedRec
18fa0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20  ord *pIdxKey;   
18fb0 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73  /* Unpacked vers
18fc0 69 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20  ion of P4 */..  
18fd0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b    /* Make sure K
18fe0 20 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64   is a string and
18ff0 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74   make zKey point
19000 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20   to K.    */.   
19010 20 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61   assert( pK->fla
19020 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
19030 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
19040 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
19050 55 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79  Unpack(pCx->pKey
19060 49 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d  Info, pK->n, pK-
19070 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  >z,.            
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52            aTempR
190a0 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
190b0 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70  Rec));.    if( p
190c0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
190d0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
190e0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
190f0 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
19100 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
19110 44 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63  D;..    /* Searc
19120 68 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69  h for an entry i
19130 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62  n P1 where all b
19140 75 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69  ut the last rowi
19150 64 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a  d match K.    **
19160 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
19170 73 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70  such entry, 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 61  P2..    */.    a
191a0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
191b0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
191c0 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53  .    pCx->cacheS
191d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
191e0 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ALE;.    rc = sq
191f0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
19200 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
19210 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
19220 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
19230 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19240 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
19250 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
19260 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
19270 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
19280 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19290 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c    }.    if( res<
192a0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
192b0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
192c0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
192d0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
192e0 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
192f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
19300 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
19310 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
19320 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
19330 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
19340 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20   }.    }.    rc 
19350 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
19360 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20  KeyCompare(pCx, 
19370 70 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20  pIdxKey, &res); 
19380 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
19390 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
193a0 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
193b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
193c0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
193d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
193e0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
193f0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
19400 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
19410 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
19420 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   /* At this poin
19430 74 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e  t, pCrsr is poin
19440 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79  ting to an entry
19450 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c   in P1 where all
19460 20 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20   but.    ** the 
19470 66 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65  final entry (the
19480 20 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20   rowid) matches 
19490 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  K.  Check to see
194a0 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66   if the.    ** f
194b0 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d  inal rowid colum
194c0 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
194d0 72 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71  rom R.  If it eq
194e0 75 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70  uals R then jump
194f0 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
19500 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a  ely to P2..    *
19510 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
19520 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70  e3VdbeIdxRowid(p
19530 43 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69  Crsr, &v);.    i
19540 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19550 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
19560 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19570 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
19580 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70   v==R ){.      p
19590 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
195a0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
195b0 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
195c0 66 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20  final varint of 
195d0 74 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65  the key is diffe
195e0 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74  rent from R.  St
195f0 6f 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20  ore it back.    
19600 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ** into register
19610 20 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72   R3.  (The recor
19620 64 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65  d number of an e
19630 6e 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74  ntry that violat
19640 65 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51  es.    ** a UNIQ
19650 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a  UE constraint.).
19660 20 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d      */.    pIn3-
19670 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73  >u.i = v;.    as
19680 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
19690 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d  s&MEM_Int );.  }
196a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
196b0 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
196c0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
196d0 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e  *.** Use the con
196e0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
196f0 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72   P3 as a integer
19700 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
19710 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
19720 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
19730 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
19740 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
19750 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
19760 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
19770 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
19780 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  u.  The cursor i
19790 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
197a0 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
197b0 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
197c0 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
197d0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
197e0 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
197f0 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
19800 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
19810 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
19820 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
19830 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
19840 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
19850 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
19860 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
19870 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
19880 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
19890 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
198a0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
198b0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
198c0 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
198d0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
198e0 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
198f0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
19900 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19910 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
19920 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
19930 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
19940 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
19950 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
19960 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
19970 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
19980 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
19990 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
199a0 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
199b0 73 20 3d 20 30 3b 0a 20 20 20 20 75 36 34 20 69  s = 0;.    u64 i
199c0 4b 65 79 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Key;.    assert(
199d0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
199e0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
199f0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
19a00 5d 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  ]->isTable );.  
19a10 20 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65    iKey = intToKe
19a20 79 28 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  y(pIn3->u.i);.  
19a30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19a40 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
19a50 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
19a60 2c 20 30 2c 26 72 65 73 29 3b 0a 20 20 20 20 70  , 0,&res);.    p
19a70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  C->lastRowid = p
19a80 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43  In3->u.i;.    pC
19a90 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
19aa0 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
19ab0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
19ac0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
19ad0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
19ae0 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 72 65  TALE;.    if( re
19af0 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63  s!=0 ){.      pc
19b00 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
19b10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
19b20 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
19b30 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  0 );.    }.  }el
19b40 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75  se if( !pC->pseu
19b50 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  doTable ){.    /
19b60 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
19b70 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
19b80 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
19b90 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
19ba0 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
19bb0 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
19bc0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
19bd0 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
19be0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
19bf0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
19c00 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
19c10 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
19c20 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62  id==0 );.  }.  b
19c30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19c40 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
19c50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
19c60 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
19c70 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
19c80 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
19c90 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
19ca0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
19cb0 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
19cc0 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
19cd0 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
19ce0 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
19cf0 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
19d00 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
19d10 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
19d20 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
19d30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
19d40 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
19d50 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
19d60 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
19d70 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19d80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
19d90 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
19da0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
19db0 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43 6f 75 6e  pCsr[i]->seqCoun
19dc0 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  t++;.  MemSetTyp
19dd0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
19de0 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
19df0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
19e00 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
19e10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  * *.**.** Get a 
19e20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
19e30 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
19e40 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
19e50 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
19e60 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
19e70 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
19e80 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
19e90 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
19ea0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
19eb0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
19ec0 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
19ed0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
19ee0 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
19ef0 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
19f00 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
19f10 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
19f20 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
19f30 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c 61  hat holds the la
19f40 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
19f50 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
19f60 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f  cord number.  No
19f70 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
19f80 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ers are allowed 
19f90 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68  to be less.** th
19fa0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20  an this value.  
19fb0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
19fc0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
19fd0 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46 55  mum, a SQLITE_FU
19fe0 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 67  LL.** error is g
19ff0 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20 50  enerated.  The P
1a000 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1a010 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 67  dated with the g
1a020 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f  enerated.** reco
1a030 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  rd number.  This
1a040 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1a050 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1a060 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1a070 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1a080 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1a090 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1a0a0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1a0b0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1a0c0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1a0d0 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 56    i64 v = 0;.  V
1a0e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1a0f0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1a100 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1a110 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1a120 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
1a130 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
1a140 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d  r[i])->pCursor==
1a150 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
1a160 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1a170 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1a180 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1a190 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1a1a0 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1a1b0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1a1c0 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1a1d0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1a1e0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1a1f0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1a200 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1a210 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1a220 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1a230 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1a240 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1a250 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1a260 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1a270 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1a280 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1a290 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1a2a0 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1a2b0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1a2c0 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1a2d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1a2e0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1a2f0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1a300 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1a310 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1a320 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1a330 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1a340 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1a350 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1a360 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1a370 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1a380 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1a390 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1a3a0 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1a3b0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1a3c0 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1a3d0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1a3e0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1a3f0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1a400 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20  1000 times..    
1a410 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61 20  **.    ** For a 
1a420 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73 20  table with less 
1a430 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65  than 2 billion e
1a440 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f 62  ntries, the prob
1a450 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  ability.    ** o
1a460 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61 20  f not finding a 
1a470 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73 20  unused rowid is 
1a480 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e 20  about 1.0e-300. 
1a490 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20 20   This is a .    
1a4a0 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62  ** non-zero prob
1a4b0 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74 20  ability, but it 
1a4c0 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68 69  is still vanishi
1a4d0 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73  ngly small and s
1a4e0 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76  hould.    ** nev
1a4f0 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62 6c  er cause a probl
1a500 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75 63  em.  You are muc
1a510 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b  h, much more lik
1a520 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20 20  ely to have a.  
1a530 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66 61    ** hardware fa
1a540 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20 74  ilure than for t
1a550 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  his algorithm to
1a560 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20   fail..    **.  
1a570 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73 69    ** The analysi
1a580 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  s in the previou
1a590 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73 75  s paragraph assu
1a5a0 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61 76  mes that you hav
1a5b0 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20  e a good.    ** 
1a5c0 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d  source of random
1a5d0 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61 20   numbers.  Is a 
1a5e0 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1a5f0 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a   like lrand48().
1a600 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75      ** good enou
1a610 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79 62  gh?  Maybe. Mayb
1a620 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72 64  e not. It's hard
1a630 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65 72   to know whether
1a640 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69   there.    ** mi
1a650 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62 75  ght be subtle bu
1a660 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65  gs is some imple
1a670 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72  mentations of lr
1a680 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20 20  and48() that.   
1a690 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65 20   ** could cause 
1a6a0 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f  problems. To avo
1a6b0 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c 20  id uncertainty, 
1a6c0 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73 20  SQLite uses its 
1a6d0 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64  own .    ** rand
1a6e0 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
1a6f0 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65  tor based on the
1a700 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a   RC4 algorithm..
1a710 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f      **.    ** To
1a720 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74   promote localit
1a730 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20 66  y of reference f
1a740 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69 6e  or repetitive in
1a750 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20 2a  serts, the.    *
1a760 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74 65  * first few atte
1a770 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e 67  mpts at choosing
1a780 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20   a random rowid 
1a790 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73 74  pick values just
1a7a0 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a   a little.    **
1a7b0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1a7c0 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64 2e   previous rowid.
1a7d0 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e 20    This has been 
1a7e0 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e 74  shown experiment
1a7f0 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64  ally.    ** to d
1a800 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64 20  ouble the speed 
1a810 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65 72  of the COPY oper
1a820 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
1a830 20 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53 51    int res, rx=SQ
1a840 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20  LITE_OK, cnt;.  
1a850 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e 74    i64 x;.    cnt
1a860 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28 73   = 0;.    if( (s
1a870 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1a880 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28 42  (pC->pCursor)&(B
1a890 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45  TREE_INTKEY|BTRE
1a8a0 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d 0a  E_ZERODATA)) !=.
1a8b0 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1a8c0 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20 20  INTKEY ){.      
1a8d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
1a8e0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
1a8f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a900 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1a910 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69     assert( (sqli
1a920 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
1a930 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52  ->pCursor) & BTR
1a940 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b  EE_INTKEY)!=0 );
1a950 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71  .    assert( (sq
1a960 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28  lite3BtreeFlags(
1a970 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42  pC->pCursor) & B
1a980 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d  TREE_ZERODATA)==
1a990 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  0 );..#ifdef SQL
1a9a0 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
1a9b0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1a9c0 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
1a9d0 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
1a9e0 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
1a9f0 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
1aa00 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
1aa10 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1aa20 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
1aa30 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1aa40 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
1aa50 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
1aa60 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
1aa70 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
1aa80 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
1aa90 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
1aaa0 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
1aab0 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
1aac0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1aad0 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
1aae0 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
1aaf0 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
1ab00 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
1ab10 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
1ab20 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1ab30 20 20 69 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f    if( pC->nextRo
1ab40 77 69 64 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  widValid ){.    
1ab50 20 20 20 20 76 20 3d 20 70 43 2d 3e 6e 65 78 74      v = pC->next
1ab60 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 7d 65 6c  Rowid;.      }el
1ab70 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
1ab80 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1ab90 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1aba0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1abb0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1abc0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
1abd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1abe0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1abf0 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1ac00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1ac10 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
1ac20 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
1ac30 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1ac40 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1ac50 29 3b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  );.          v =
1ac60 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20   keyToInt(v);.  
1ac70 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1ac80 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1ac90 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1aca0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1acb0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1acc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1acd0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1ace0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1acf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ad00 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1ad10 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1ad20 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1ad30 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 20 20 20  Mem *pMem;.     
1ad40 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ad50 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
1ad60 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50  =p->nMem ); /* P
1ad70 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1ad80 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20 20 20 20  ory cell */.    
1ad90 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61      pMem = &p->a
1ada0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52  Mem[pOp->p3];..R
1adb0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1adc0 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
1add0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1ade0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1adf0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73  Mem);.        as
1ae00 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
1ae10 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1ae20 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
1ae30 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
1ae40 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
1ae50 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
1ae60 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
1ae70 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1ae80 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1ae90 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  ITE_FULL;.      
1aea0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1aeb0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1aec0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1aed0 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
1aee0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1aef0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1af00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1af10 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
1af20 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
1af30 0a 0a 20 20 20 20 20 20 69 66 28 20 76 3c 4d 41  ..      if( v<MA
1af40 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1af50 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64     pC->nextRowid
1af60 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1af70 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64     pC->nextRowid
1af80 20 3d 20 76 2b 31 3b 0a 20 20 20 20 20 20 7d 65   = v+1;.      }e
1af90 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
1afa0 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20  >nextRowidValid 
1afb0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1afc0 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1afd0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1afe0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1aff0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1b000 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73   SQLITE_FULL mus
1b010 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
1b020 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f  prior to this */
1b030 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 70  .      v = db->p
1b040 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20  riorNewRowid;.  
1b050 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1b060 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
1b070 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28 76 26  f( cnt==0 && (v&
1b080 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a  0xffffff)==v ){.
1b090 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1b0a0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1b0b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1b0c0 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
1b0d0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
1b0e0 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
1b0f0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1b100 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b110 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e    if( v==0 ) con
1b120 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 78  tinue;.        x
1b130 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a   = intToKey(v);.
1b140 20 20 20 20 20 20 20 20 72 78 20 3d 20 73 71 6c          rx = sql
1b150 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1b160 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1b170 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 78 2c 20  sor, 0, (u64)x, 
1b180 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1b190 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d    cnt++;.      }
1b1a0 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20 26  while( cnt<100 &
1b1b0 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rx==SQLITE_OK 
1b1c0 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20  && res==0 );.   
1b1d0 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52     db->priorNewR
1b1e0 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20 20 20  owid = v;.      
1b1f0 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f  if( rx==SQLITE_O
1b200 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
1b210 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1b220 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20  TE_FULL;.       
1b230 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b240 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b250 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
1b260 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1b270 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1b280 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1b290 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1b2a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1b2b0 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
1b2c0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1b2d0 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  Int);.  pOut->u.
1b2e0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
1b2f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
1b300 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
1b310 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20   P5.**.** Write 
1b320 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
1b330 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
1b340 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
1b350 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
1b360 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
1b370 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
1b380 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
1b390 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
1b3a0 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
1b3b0 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
1b3c0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
1b3d0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1b3e0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1b3f0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1b400 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1b410 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69   must.** be an i
1b420 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66  nteger..**.** If
1b430 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1b440 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
1b450 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1b460 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1b470 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1b480 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1b490 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
1b4a0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
1b4b0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
1b4c0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
1b4d0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
1b4e0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
1b4f0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
1b500 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1b510 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
1b520 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
1b530 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
1b540 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1b550 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1b560 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1b570 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1b580 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1b590 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1b5a0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1b5b0 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1b5c0 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1b5d0 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1b5e0 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1b5f0 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1b600 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1b610 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1b620 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1b630 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1b640 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1b650 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1b660 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1b670 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1b680 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1b690 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1b6a0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1b6b0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1b6c0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1b6d0 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1b6e0 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1b6f0 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1b700 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1b710 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1b720 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1b730 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1b740 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1b750 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1b760 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1b770 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1b780 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1b790 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
1b7a0 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d  _Insert: {.  Mem
1b7b0 20 2a 70 44 61 74 61 20 3d 20 26 70 2d 3e 61 4d   *pData = &p->aM
1b7c0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d  em[pOp->p2];.  M
1b7d0 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70 2d 3e 61  em *pKey = &p->a
1b7e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20  Mem[pOp->p3];.. 
1b7f0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20   i64 iKey;   /* 
1b800 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
1b810 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
1b820 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
1b830 73 65 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  serted */.  int 
1b840 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1b850 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1b860 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1b870 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1b880 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1b890 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
1b8a0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1b8b0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1b8c0 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
1b8d0 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1b8e0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
1b8f0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1b900 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1b910 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1b920 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1b930 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ta);.  REGISTER_
1b940 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1b950 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20  Key);..  iKey = 
1b960 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75  intToKey(pKey->u
1b970 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
1b980 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
1b990 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
1b9a0 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
1b9b0 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
1b9c0 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
1b9d0 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  owid = pKey->u.i
1b9e0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 65 78 74  ;.  if( pC->next
1b9f0 52 6f 77 69 64 56 61 6c 69 64 20 26 26 20 70 4b  RowidValid && pK
1ba00 65 79 2d 3e 75 2e 69 3e 3d 70 43 2d 3e 6e 65 78  ey->u.i>=pC->nex
1ba10 74 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 70 43  tRowid ){.    pC
1ba20 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64  ->nextRowidValid
1ba30 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1ba40 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1ba50 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
1ba60 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
1ba70 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
1ba80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1ba90 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
1baa0 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
1bab0 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69  _Str) );.  }.  i
1bac0 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  f( pC->pseudoTab
1bad0 6c 65 20 29 7b 0a 20 20 20 20 69 66 28 20 21 70  le ){.    if( !p
1bae0 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  C->ephemPseudoTa
1baf0 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ble ){.      sql
1bb00 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1bb10 43 2d 3e 70 44 61 74 61 29 3b 0a 20 20 20 20 7d  C->pData);.    }
1bb20 0a 20 20 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20  .    pC->iKey = 
1bb30 69 4b 65 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44  iKey;.    pC->nD
1bb40 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a  ata = pData->n;.
1bb50 20 20 20 20 69 66 28 20 70 44 61 74 61 2d 3e 7a      if( pData->z
1bb60 3d 3d 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63  ==pData->zMalloc
1bb70 20 7c 7c 20 70 43 2d 3e 65 70 68 65 6d 50 73 65   || pC->ephemPse
1bb80 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
1bb90 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 70 44    pC->pData = pD
1bba0 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66  ata->z;.      if
1bbb0 28 20 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75  ( !pC->ephemPseu
1bbc0 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  doTable ){.     
1bbd0 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20     pData->flags 
1bbe0 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20  &= ~MEM_Dyn;.   
1bbf0 20 20 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67       pData->flag
1bc00 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a  s |= MEM_Ephem;.
1bc10 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a          pData->z
1bc20 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
1bc30 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1bc40 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d       pC->pData =
1bc50 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20   sqlite3Malloc( 
1bc60 70 43 2d 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20  pC->nData+2 );. 
1bc70 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 70 44       if( !pC->pD
1bc80 61 74 61 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ata ) goto no_me
1bc90 6d 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  m;.      memcpy(
1bca0 70 43 2d 3e 70 44 61 74 61 2c 20 70 44 61 74 61  pC->pData, pData
1bcb0 2d 3e 7a 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b  ->z, pC->nData);
1bcc0 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61  .      pC->pData
1bcd0 5b 70 43 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b  [pC->nData] = 0;
1bce0 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61  .      pC->pData
1bcf0 5b 70 43 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20  [pC->nData+1] = 
1bd00 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  0;.    }.    pC-
1bd10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1bd20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 6e  }else{.    int n
1bd30 5a 65 72 6f 3b 0a 20 20 20 20 69 66 28 20 70 44  Zero;.    if( pD
1bd40 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
1bd50 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e  _Zero ){.      n
1bd60 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
1bd70 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
1bd80 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
1bd90 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
1bda0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
1bdb0 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
1bdc0 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
1bdf0 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
1be00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
1be20 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
1be30 50 50 45 4e 44 29 3b 0a 20 20 7d 0a 20 20 0a 20  PPEND);.  }.  . 
1be40 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1be50 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
1be60 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1be70 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1be80 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1be90 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
1bea0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
1beb0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
1bec0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1bed0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
1bee0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1bef0 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f  ->p4.z ){.    co
1bf00 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
1bf10 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
1bf20 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73  .zName;.    cons
1bf30 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70  t char *zTbl = p
1bf40 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 69 6e  Op->p4.z;.    in
1bf50 74 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35  t op = ((pOp->p5
1bf60 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
1bf70 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
1bf80 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
1bf90 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ERT);.    assert
1bfa0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1bfb0 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1bfc0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1bfd0 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62  dateArg, op, zDb
1bfe0 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20  , zTbl, iKey);. 
1bff0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1c000 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62  Db>=0 );.  }.  b
1c010 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c020 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32  de: Delete P1 P2
1c030 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   * P4 *.**.** De
1c040 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
1c050 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
1c060 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
1c070 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
1c080 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77  .** The cursor w
1c090 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
1c0a0 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74  ting at either t
1c0b0 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
1c0c0 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
1c0d0 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
1c0e0 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
1c0f0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
1c100 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
1c110 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
1c120 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
1c130 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48  l be a no-op.  H
1c140 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f  ence it is OK to
1c150 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63   delete.** a rec
1c160 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
1c170 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a  an Next loop..**
1c180 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1c190 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1c1a0 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65  f P2 is set, the
1c1b0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1c1c0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1c1d0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1c1e0 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
1c1f0 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
1c200 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
1c210 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
1c220 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
1c230 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
1c240 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
1c250 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20  t NULL, then it 
1c260 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
1c270 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31  he table that P1
1c280 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20   is.** pointing 
1c290 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20  to.  The update 
1c2a0 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
1c2b0 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73  oked, if it exis
1c2c0 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  ts..** If P4 is 
1c2d0 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  not NULL then th
1c2e0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1c2f0 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
1c300 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f  ioned.** using O
1c310 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
1c320 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
1c330 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1c340 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
1c350 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1c360 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  ;.  i64 iKey;.  
1c370 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1c380 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1c390 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1c3a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c3b0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1c3c0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c3d0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1c3e0 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76  =0 );  /* Only v
1c3f0 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61  alid for real ta
1c400 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74  bles, no pseudot
1c410 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
1c420 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
1c430 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1c440 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74  d, set iKey to t
1c450 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a  he rowid of the.
1c460 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64    ** row being d
1c470 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  eleted..  */.  i
1c480 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
1c490 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1c4a0 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72  4.z ){.    asser
1c4b0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1c4c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c4d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1c4e0 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20  ;  /* lastRowid 
1c4f0 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20  set by previous 
1c500 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20  OP_NotFound */. 
1c510 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61     iKey = pC->la
1c520 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20  stRowid;.  }..  
1c530 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1c540 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
1c550 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1c560 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c570 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c  rror;.  rc = sql
1c580 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1c590 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1c5a0 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1c5b0 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
1c5c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1c5d0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1c5e0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1c5f0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1c600 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1c610 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1c620 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1c630 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1c640 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1c650 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1c660 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1c670 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1c680 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1c690 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1c6a0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1c6b0 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1c6c0 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1c6d0 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1c6e0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1c6f0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1c700 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1c710 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1c720 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1c730 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1c740 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a  setCount P1 * *.
1c750 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c760 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73  e resets the VMs
1c770 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1c780 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49   counter to 0. I
1c790 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a  f P1 is true,.**
1c7a0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
1c7b0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
1c7c0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
1c7d0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1c7e0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
1c7f0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
1c800 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
1c810 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
1c820 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20  3_changes()).** 
1c830 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73  before it is res
1c840 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
1c850 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
1c860 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
1c870 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
1c880 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
1c890 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1c8a0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
1c8b0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20  >nChange);.  }. 
1c8c0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
1c8d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c8e0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
1c8f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1c900 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
1c910 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
1c920 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
1c930 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1c940 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1c950 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1c960 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
1c970 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
1c980 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
1c990 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1c9a0 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1c9b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1c9c0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1c9d0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1c9e0 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1c9f0 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1ca00 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1ca10 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1ca20 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1ca30 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
1ca40 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
1ca50 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1ca60 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1ca70 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1ca80 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
1ca90 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1caa0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1cab0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1cac0 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
1cad0 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
1cae0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
1caf0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1cb00 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1cb10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1cb20 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1cb30 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1cb40 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1cb50 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1cb60 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1cb70 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1cb80 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1cb90 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
1cba0 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
1cbb0 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ta: {.  int i = 
1cbc0 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1cbd0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1cbe0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1cbf0 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
1cc00 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1cc10 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  2];..  /* Note t
1cc20 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
1cc30 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
1cc40 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
1cc50 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
1cc60 2f 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  /.  assert( i>=0
1cc70 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1cc80 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1cc90 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1cca0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
1ccb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ccc0 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73  _RowKey );.  ass
1ccd0 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78  ert( pC->isIndex
1cce0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1ccf0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
1cd00 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1cd10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1cd20 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
1cd30 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1cd40 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  doTable==0 );.  
1cd50 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1cd60 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
1cd70 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1cd80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1cd90 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1cda0 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1cdb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1cdc0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1cdd0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
1cde0 20 20 69 36 34 20 6e 36 34 3b 0a 20 20 20 20 61    i64 n64;.    a
1cdf0 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
1ce00 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ble );.    sqlit
1ce10 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1ce20 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
1ce30 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
1ce40 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
1ce50 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
1ce60 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
1ce70 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 69      }.    n = (i
1ce80 6e 74 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  nt)n64;.  }else{
1ce90 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1cea0 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
1ceb0 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 28 69   &n);.    if( (i
1cec0 6e 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  nt)n>db->aLimit[
1ced0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1cee0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1cef0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1cf00 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
1cf10 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
1cf20 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
1cf30 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
1cf40 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
1cf50 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
1cf60 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
1cf70 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
1cf80 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
1cf90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1cfa0 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
1cfb0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
1cfc0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1cfd0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
1cfe0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
1cff0 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
1d000 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
1d010 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
1d020 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
1d030 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
1d040 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1d050 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
1d060 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d070 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
1d080 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
1d090 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
1d0a0 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
1d0b0 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
1d0c0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
1d0d0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
1d0e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
1d0f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
1d100 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
1d110 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1d120 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
1d130 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1d140 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d150 20 20 69 36 34 20 76 3b 0a 0a 20 20 61 73 73 65    i64 v;..  asse
1d160 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1d170 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1d180 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
1d190 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1d1a0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1d1b0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
1d1c0 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
1d1d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1d1e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
1d1f0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d200 64 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  d ){.    v = pC-
1d210 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65  >lastRowid;.  }e
1d220 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75  lse if( pC->pseu
1d230 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76  doTable ){.    v
1d240 20 3d 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e   = keyToInt(pC->
1d250 69 4b 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69  iKey);.  }else i
1d260 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
1d270 7b 0a 20 20 20 20 2f 2a 20 4c 65 61 76 65 20 74  {.    /* Leave t
1d280 68 65 20 72 6f 77 69 64 20 73 65 74 20 74 6f 20  he rowid set to 
1d290 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72  a NULL */.    br
1d2a0 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  eak;.  }else{.  
1d2b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1d2c0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
1d2d0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1d2e0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1d2f0 20 26 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65   &v);.    v = ke
1d300 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20  yToInt(v);.  }. 
1d310 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
1d320 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1d330 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1d340 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d350 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
1d360 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1d370 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
1d380 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
1d390 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
1d3a0 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
1d3b0 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
1d3c0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
1d3d0 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
1d3e0 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
1d3f0 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
1d400 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
1d410 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1d420 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
1d430 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1d440 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1d450 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d460 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1d470 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1d480 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1d490 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
1d4a0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
1d4b0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
1d4c0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1d4d0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
1d4e0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
1d4f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d500 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
1d510 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
1d520 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
1d530 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
1d540 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
1d550 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
1d560 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
1d570 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
1d580 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1d590 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1d5a0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1d5b0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1d5c0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1d5d0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1d5e0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1d5f0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1d600 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1d610 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1d620 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1d630 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1d640 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1d650 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
1d660 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
1d670 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1d680 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d690 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1d6a0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1d6b0 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1d6c0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1d6d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d6e0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1d6f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
1d700 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1d710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1d720 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
1d730 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1d740 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
1d750 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
1d760 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
1d770 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d780 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1d790 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1d7a0 3b 0a 20 20 69 66 28 20 72 65 73 20 26 26 20 70  ;.  if( res && p
1d7b0 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
1d7c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d7d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1d7e0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
1d7f0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
1d800 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d810 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
1d820 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
1d830 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
1d840 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
1d850 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
1d860 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
1d870 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
1d880 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
1d890 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
1d8a0 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
1d8b0 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
1d8c0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
1d8d0 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
1d8e0 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
1d8f0 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
1d900 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
1d910 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
1d920 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
1d930 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
1d940 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
1d950 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
1d960 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
1d970 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
1d980 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
1d990 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
1d9a0 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
1d9b0 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
1d9c0 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
1d9d0 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
1d9e0 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
1d9f0 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
1da00 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
1da10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
1da20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1da30 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
1da40 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
1da50 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1da60 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
1da70 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
1da80 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
1da90 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  -1]++;.  /* Fall
1daa0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
1dab0 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
1dac0 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
1dad0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1dae0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
1daf0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
1db00 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
1db10 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
1db20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
1db30 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
1db40 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1db50 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1db60 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
1db70 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
1db80 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
1db90 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1dba0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
1dbb0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
1dbc0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1dbd0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
1dbe0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
1dbf0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
1dc00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1dc10 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
1dc20 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1dc30 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  p */.  int i = p
1dc40 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
1dc50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1dc60 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
1dc70 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
1dc80 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1dc90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1dca0 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1dcb0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1dcc0 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
1dcd0 20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30   pC->pCursor)!=0
1dce0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1dcf0 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
1dd00 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
1dd10 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72   pC->atFirst = r
1dd20 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20  es==0 ?1:0;.    
1dd30 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1dd40 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1dd50 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1dd60 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 65 6c  CHE_STALE;.  }el
1dd70 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b  se{.    res = 1;
1dd80 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
1dd90 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
1dda0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1ddb0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
1ddc0 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73  nOp );.  if( res
1ddd0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1dde0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1ddf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1de00 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
1de10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
1de20 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
1de30 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1de40 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
1de50 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
1de60 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
1de70 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
1de80 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
1de90 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
1dea0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
1deb0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
1dec0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
1ded0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
1dee0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
1def0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
1df00 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1df10 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
1df20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
1df30 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
1df40 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
1df50 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
1df60 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20  lso: Prev.*/./* 
1df70 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
1df80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
1df90 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
1dfa0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1dfb0 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
1dfc0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
1dfd0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
1dfe0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
1dff0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
1e000 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
1e010 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
1e020 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
1e030 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
1e040 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
1e050 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
1e060 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
1e070 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
1e080 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
1e090 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
1e0a0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
1e0b0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
1e0c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1e0d0 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
1e0e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
1e0f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
1e100 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1e110 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
1e120 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1e130 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
1e140 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f  res;..  CHECK_FO
1e150 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61  R_INTERRUPT;.  a
1e160 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e170 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e180 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1e190 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1e1a0 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30  p1];.  if( pC==0
1e1b0 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20   ){.    break;  
1e1c0 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  /* See ticket #2
1e1d0 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72  273 */.  }.  pCr
1e1e0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1e1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1e200 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  r );.  res = 1;.
1e210 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
1e220 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
1e230 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f  );.  rc = pOp->o
1e240 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f  pcode==OP_Next ?
1e250 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1e260 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a  t(pCrsr, &res) :
1e270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e290 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
1e2a0 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29  ous(pCrsr, &res)
1e2b0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1e2c0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
1e2d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e2e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
1e2f0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
1e300 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e310 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
1e320 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  5 ) p->aCounter[
1e330 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69  pOp->p5-1]++;.#i
1e340 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1e350 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
1e360 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1e370 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f  dif.  }.  pC->ro
1e380 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1e390 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e3a0 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
1e3b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1e3c0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
1e3d0 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65  holds a SQL inde
1e3e0 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
1e3f0 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 49 64 78 52   the.** MakeIdxR
1e400 65 63 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  ec instructions.
1e410 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
1e420 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
1e430 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
1e440 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
1e450 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
1e460 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
1e470 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
1e480 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
1e490 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
1e4a0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
1e4b0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
1e4c0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
1e4d0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1e4e0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
1e4f0 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
1e500 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1e510 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
1e520 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
1e530 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
1e540 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
1e550 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74   /* in2 */.  int
1e560 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1e570 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e580 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e590 72 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  r;.  assert( i>=
1e5a0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1e5b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1e5c0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1e5d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
1e5e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
1e5f0 62 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73  b );.  if( (pCrs
1e600 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  r = (pC = p->apC
1e610 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29  sr[i])->pCursor)
1e620 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
1e630 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1e640 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  0 );.    rc = Ex
1e650 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
1e660 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1e670 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
1e680 6e 74 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e  nt nKey = pIn2->
1e690 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  n;.      const c
1e6a0 68 61 72 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32  har *zKey = pIn2
1e6b0 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ->z;.      rc = 
1e6c0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
1e6d0 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
1e6e0 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
1e6f0 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20  pOp->p3);.      
1e700 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1e710 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1e720 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
1e730 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e740 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
1e750 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e760 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
1e770 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1e780 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
1e790 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
1e7a0 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
1e7b0 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
1e7c0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e7d0 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
1e7e0 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
1e7f0 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
1e800 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
1e810 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
1e820 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
1e830 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  te: {.  int i = 
1e840 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1e850 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1e860 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1e870 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1e880 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e890 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
1e8a0 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  >p2+pOp->p3<=p->
1e8b0 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74  nMem );.  assert
1e8c0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1e8d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e8e0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1e8f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72  =0 );.  if( (pCr
1e900 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70  sr = (pC = p->ap
1e910 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
1e920 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )!=0 ){.    int 
1e930 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65  res;.    Unpacke
1e940 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 72  dRecord r;.    r
1e950 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1e960 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1e970 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
1e980 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
1e990 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
1e9a0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1e9b0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
1e9c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e9d0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1e9e0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1e9f0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
1ea00 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1ea10 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
1ea20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
1ea30 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
1ea40 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1ea50 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1ea60 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
1ea70 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1ea80 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1ea90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1eaa0 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
1eab0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1eac0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1ead0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
1eae0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
1eaf0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
1eb00 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
1eb10 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1eb20 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
1eb30 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
1eb40 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
1eb50 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
1eb60 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
1eb70 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
1eb80 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
1eb90 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
1eba0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
1ebb0 2c 20 4d 61 6b 65 49 64 78 52 65 63 2e 0a 2a 2f  , MakeIdxRec..*/
1ebc0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
1ebd0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
1ebe0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1ebf0 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1ec00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 43  = pOp->p1;.  BtC
1ec10 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1ec20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ec30 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1ec40 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1ec50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1ec60 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1ec70 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
1ec80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
1ec90 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
1eca0 0a 20 20 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  .    i64 rowid;.
1ecb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1ecc0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1ecd0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
1ece0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1ecf0 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d   );.    if( !pC-
1ed00 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
1ed10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1ed20 62 65 49 64 78 52 6f 77 69 64 28 70 43 72 73 72  beIdxRowid(pCrsr
1ed30 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20  , &rowid);.     
1ed40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1ed50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1ed60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ed70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1ed80 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
1ed90 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
1eda0 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
1edb0 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
1edc0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
1edd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
1ede0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
1edf0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
1ee00 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
1ee10 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
1ee20 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
1ee30 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
1ee40 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
1ee50 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
1ee60 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
1ee70 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
1ee80 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
1ee90 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
1eea0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
1eeb0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
1eec0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
1eed0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
1eee0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
1eef0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1ef00 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1ef10 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
1ef20 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
1ef30 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1ef40 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1ef50 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
1ef60 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
1ef70 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
1ef80 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
1ef90 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
1efa0 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
1efb0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
1efc0 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
1efd0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
1efe0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
1eff0 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
1f000 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
1f010 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
1f020 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
1f030 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
1f040 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
1f050 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
1f060 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
1f070 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
1f080 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
1f090 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
1f0a0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
1f0b0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
1f0c0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
1f0d0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
1f0e0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
1f0f0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
1f100 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
1f110 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
1f120 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
1f130 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
1f140 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
1f150 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
1f160 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
1f170 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
1f180 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
1f190 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
1f1a0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1f1b0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
1f1c0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1f1d0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1f1e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
1f1f0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
1f200 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
1f210 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
1f220 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a  psilon prior .**
1f230 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
1f240 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  on.  This makes 
1f250 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
1f260 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63  like IdxLE..*/.c
1f270 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
1f280 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f290 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in3 */.case OP_I
1f2a0 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
1f2b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1f2c0 20 69 6e 74 20 69 3d 20 70 4f 70 2d 3e 70 31 3b   int i= pOp->p1;
1f2d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f2e0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  C;..  assert( i>
1f2f0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1f300 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1f310 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
1f320 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d  ;.  if( (pC = p-
1f330 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
1f340 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  sor!=0 ){.    in
1f350 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63  t res;.    Unpac
1f360 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
1f370 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1f380 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1f390 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1f3a0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1f3b0 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  >p5==1 );.    as
1f3c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1f3d0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1f3e0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1f3f0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1f400 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1f410 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
1f420 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
1f430 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1f440 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1f450 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   | UNPACKED_IGNO
1f460 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65  RE_ROWID;.    }e
1f470 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  lse{.      r.fla
1f480 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47  gs = UNPACKED_IG
1f490 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
1f4a0 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  }.    r.aMem = &
1f4b0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
1f4c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f4d0 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
1f4e0 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73  are(pC, &r, &res
1f4f0 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
1f500 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
1f510 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1f520 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  -res;.    }else{
1f530 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f540 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
1f550 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65  dxGE );.      re
1f560 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  s++;.    }.    i
1f570 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
1f580 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1f590 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1 ;.    }.  }. 
1f5a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f5b0 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
1f5c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1f5d0 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
1f5e0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1f5f0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
1f600 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
1f610 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
1f620 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
1f630 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
1f640 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
1f650 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
1f660 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1f670 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
1f680 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
1f690 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
1f6a0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
1f6b0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
1f6c0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
1f6d0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
1f6e0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
1f6f0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
1f700 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
1f710 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
1f720 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
1f730 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
1f740 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
1f750 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
1f760 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
1f770 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
1f780 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
1f790 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
1f7a0 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
1f7b0 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
1f7c0 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
1f7d0 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
1f7e0 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
1f7f0 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
1f800 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
1f810 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
1f820 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
1f830 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1f840 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
1f850 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
1f860 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
1f870 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
1f880 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
1f890 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
1f8a0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
1f8b0 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
1f8c0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
1f8d0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1f8e0 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
1f8f0 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
1f900 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
1f910 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f920 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
1f930 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
1f940 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
1f950 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d  : {     /* out2-
1f960 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1f970 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
1f980 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64 65 66 20  t iCnt;.#ifndef 
1f990 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1f9a0 55 41 4c 54 41 42 4c 45 0a 20 20 56 64 62 65 20  UALTABLE.  Vdbe 
1f9b0 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e 74 20 3d  *pVdbe;.  iCnt =
1f9c0 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
1f9d0 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
1f9e0 3b 20 70 56 64 62 65 3d 70 56 64 62 65 2d 3e 70  ; pVdbe=pVdbe->p
1f9f0 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
1fa00 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
1fa10 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
1fa20 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
1fa30 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
1fa40 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
1fa50 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
1fa60 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
1fa70 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
1fa80 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
1fa90 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20  Cnt>1 ){.    rc 
1faa0 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
1fab0 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
1fac0 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
1fad0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74    }else{.    int
1fae0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1faf0 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
1fb00 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
1fb10 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
1fb20 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
1fb30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1fb40 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
1fb50 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
1fb60 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
1fb70 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65  oved);.    MemSe
1fb80 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1fb90 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
1fba0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
1fbb0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1fbc0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
1fbd0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
1fbe0 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64  ITE_OK && iMoved
1fbf0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
1fc00 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
1fc10 64 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c  d(&db->aDb[iDb],
1fc20 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
1fc30 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
1fc40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1fc50 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
1fc60 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
1fc70 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
1fc80 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
1fc90 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
1fca0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
1fcb0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
1fcc0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
1fcd0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
1fce0 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
1fcf0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
1fd00 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
1fd10 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
1fd20 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
1fd30 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
1fd40 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
1fd50 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1fd60 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
1fd70 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
1fd80 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
1fd90 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
1fda0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
1fdb0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
1fdc0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
1fdd0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
1fde0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
1fdf0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
1fe00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
1fe10 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
1fe20 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1fe30 20 72 65 66 65 72 65 64 20 74 6f 20 6d 75 73 74   refered to must
1fe40 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
1fe50 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
1fe60 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
1fe70 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
1fe80 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
1fe90 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
1fea0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
1feb0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
1fec0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
1fed0 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
1fee0 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
1fef0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
1ff00 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
1ff10 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1ff20 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
1ff30 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
1ff40 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
1ff50 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1ff60 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
1ff70 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
1ff80 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
1ff90 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
1ffa0 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  nge = 0;.  asser
1ffb0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
1ffc0 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29   & (1<<pOp->p2))
1ffd0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
1ffe0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
1fff0 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e  able(.      db->
20000 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
20010 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d  , pOp->p1, (pOp-
20020 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a  >p3 ? &nChange :
20030 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70   0).  );.  if( p
20040 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d  Op->p3 ){.    p-
20050 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61  >nChange += nCha
20060 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  nge;.    if( pOp
20070 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20  ->p3>0 ){.      
20080 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
20090 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
200a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
200b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
200c0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
200d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
200e0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
200f0 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
20100 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
20110 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
20120 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
20130 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
20140 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
20150 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
20160 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
20170 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
20180 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
20190 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
201a0 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
201b0 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
201c0 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
201d0 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
201e0 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
201f0 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
20200 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
20210 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
20220 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
20230 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
20240 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
20250 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
20260 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20270 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
20280 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
20290 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
202a0 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
202b0 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
202c0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
202d0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
202e0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
202f0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
20300 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
20310 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
20320 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
20330 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
20340 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
20350 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
20360 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
20370 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
20380 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
20390 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
203a0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
203b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
203c0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
203d0 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
203e0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
203f0 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
20400 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
20410 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
20420 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
20430 74 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 69 6e  t pgno = 0;.  in
20440 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
20450 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
20460 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20470 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
20480 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
20490 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
204a0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
204b0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
204c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
204d0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
204e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
204f0 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
20500 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
20510 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
20520 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
20530 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41  = BTREE_LEAFDATA
20540 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20  |BTREE_INTKEY;. 
20550 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
20560 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s = BTREE_ZERODA
20570 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  TA;.  }.  rc = s
20580 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
20590 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
205a0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
205b0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
205c0 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  no;.  MemSetType
205d0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
205e0 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
205f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
20600 65 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20  eSchema P1 P2 * 
20610 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
20620 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
20630 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
20640 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
20650 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
20660 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
20670 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
20680 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20   P4.  P2 is the 
20690 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20  "force" flag.   
206a0 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65  Always do.** the
206b0 20 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69   parsing if P2 i
206c0 73 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69  s true.  If P2 i
206d0 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68  s false, then th
206e0 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a  is routine is a.
206f0 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20  ** no-op if the 
20700 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75  schema is not cu
20710 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20  rrently loaded. 
20720 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
20730 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c   if P2.** is fal
20740 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  se, the SQLITE_M
20750 41 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f  ASTER table is o
20760 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68  nly parsed if th
20770 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a  e rest of the.**
20780 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61   schema is alrea
20790 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74  dy loaded into t
207a0 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e  he symbol table.
207b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
207c0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
207d0 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
207e0 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
207f0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
20800 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
20810 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
20820 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
20830 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
20840 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
20850 68 65 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a  hema: {.  char *
20860 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20  zSql;.  int iDb 
20870 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e  = pOp->p1;.  con
20880 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72  st char *zMaster
20890 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
208a0 74 44 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74  tData;..  assert
208b0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
208c0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28  db->nDb );.  if(
208d0 20 21 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62   !pOp->p2 && !Db
208e0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
208f0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
20900 61 64 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65  aded) ){.    bre
20910 61 6b 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65  ak;.  }.  zMaste
20920 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
20930 28 69 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74  (iDb);.  initDat
20940 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69  a.db = db;.  ini
20950 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
20960 3e 70 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e  >p1;.  initData.
20970 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
20980 45 72 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d  ErrMsg;.  zSql =
20990 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
209a0 64 62 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54  db,.     "SELECT
209b0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
209c0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
209d0 73 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20  s WHERE %s",.   
209e0 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
209f0 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
20a00 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28  Op->p4.z);.  if(
20a10 20 7a 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20   zSql==0 ) goto 
20a20 6e 6f 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29  no_mem;.  (void)
20a30 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
20a40 28 64 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20  (db);.  assert( 
20a50 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
20a60 20 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62   );.  db->init.b
20a70 75 73 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44  usy = 1;.  initD
20a80 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
20a90 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64  OK;.  assert( !d
20aa0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
20ab0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
20ac0 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
20ad0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
20ae0 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
20af0 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   0);.  if( rc==S
20b00 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
20b10 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73  initData.rc;.  s
20b20 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
20b30 20 7a 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e   zSql);.  db->in
20b40 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28  it.busy = 0;.  (
20b50 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65  void)sqlite3Safe
20b60 74 79 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20  tyOn(db);.  if( 
20b70 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
20b80 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
20b90 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  mem;.  }.  break
20ba0 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ;  .}..#if !defi
20bb0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20bc0 41 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66  ANALYZE) && !def
20bd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
20be0 5f 50 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f  _PARSER)./* Opco
20bf0 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73  de: LoadAnalysis
20c00 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
20c10 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74  * Read the sqlit
20c20 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f  e_stat1 table fo
20c30 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  r database P1 an
20c40 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65  d load the conte
20c50 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  nt.** of that ta
20c60 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ble into the int
20c70 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68  ernal index hash
20c80 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69   table.  This wi
20c90 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20  ll cause.** the 
20ca0 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75  analysis to be u
20cb0 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69  sed when prepari
20cc0 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  ng all subsequen
20cd0 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61  t queries..*/.ca
20ce0 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73  se OP_LoadAnalys
20cf0 69 73 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20  is: {.  int iDb 
20d00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
20d10 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
20d20 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
20d30 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
20d40 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62  ysisLoad(db, iDb
20d50 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
20d60 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
20d70 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
20d80 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69  NALYZE) && !defi
20d90 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20da0 50 41 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20  PARSER)  */../* 
20db0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
20dc0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
20dd0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
20de0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
20df0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
20e00 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
20e10 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
20e20 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
20e30 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
20e40 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
20e50 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
20e60 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
20e70 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
20e80 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
20e90 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
20ea0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
20eb0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
20ec0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
20ed0 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
20ee0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
20ef0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
20f00 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
20f10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20f20 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
20f30 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
20f40 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
20f50 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
20f60 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
20f70 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
20f80 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
20f90 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
20fa0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
20fb0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
20fc0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
20fd0 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
20fe0 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
20ff0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
21000 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
21010 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
21020 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
21030 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
21040 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
21050 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
21060 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
21070 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
21080 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
21090 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
210a0 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
210b0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
210c0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
210d0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
210e0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
210f0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
21100 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
21110 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
21120 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
21130 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
21140 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
21150 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
21160 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
21170 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
21180 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
21190 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
211a0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
211b0 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
211c0 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
211d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
211e0 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
211f0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
21200 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
21210 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21220 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
21230 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
21240 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
21250 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  * P5.**.** Do an
21260 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
21270 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
21280 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
21290 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
212a0 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
212b0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
212c0 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
212d0 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
212e0 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
212f0 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
21300 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
21310 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
21320 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
21330 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
21340 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
21350 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
21360 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
21370 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
21380 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
21390 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
213a0 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
213b0 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
213c0 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
213d0 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
213e0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
213f0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
21400 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
21410 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
21420 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
21430 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
21440 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
21450 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65  .** stored in re
21460 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29  g(P1), reg(P1+1)
21470 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e  , reg(P1+2), ...
21480 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20  .  There are P2 
21490 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e  tables.** total.
214a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
214b0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
214c0 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
214d0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
214e0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
214f0 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
21500 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
21510 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
21520 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
21530 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
21540 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
21550 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
21560 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
21570 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
21580 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
21590 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
215a0 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
215b0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
215c0 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
215d0 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
215e0 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
215f0 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
21600 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
21610 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
21620 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
21630 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21640 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
21650 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
21660 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
21670 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
21680 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
21690 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
216a0 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
216b0 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
216c0 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e  aining */.  .  n
216d0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
216e0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
216f0 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
21700 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
21710 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
21720 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
21730 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
21740 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
21750 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
21760 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
21770 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20  nMem );.  pnErr 
21780 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
21790 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
217a0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
217b0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
217c0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
217d0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
217e0 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
217f0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
21800 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
21810 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
21820 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
21830 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
21840 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
21850 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
21860 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
21870 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
21880 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
21890 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
218a0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
218b0 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20  5))!=0 );.  z = 
218c0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
218d0 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
218e0 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
218f0 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20   aRoot, nRoot,. 
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c  (int)pnErr->u.i,
21930 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74   &nErr);.  sqlit
21940 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f  e3DbFree(db, aRo
21950 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e  ot);.  pnErr->u.
21960 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c  i -= nErr;.  sql
21970 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
21980 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
21990 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
219a0 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
219b0 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
219c0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
219d0 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
219e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
219f0 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d  etStr(pIn1, z, -
21a00 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
21a10 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20  sqlite3_free);. 
21a20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f   }.  UPDATE_MAX_
21a30 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
21a40 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
21a50 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31  ngeEncoding(pIn1
21a60 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
21a70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
21a80 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
21a90 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
21aa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
21ab0 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a  SetAdd P1 P2 * *
21ac0 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20   *.**.** Insert 
21ad0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
21ae0 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74  e held by regist
21af0 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f  er P2 into a boo
21b00 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65  lean index.** he
21b10 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
21b20 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65  1..**.** An asse
21b30 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50  rtion fails if P
21b40 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  2 is not an inte
21b50 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
21b60 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20  RowSetAdd: {    
21b70 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d     /* in2 */.  M
21b80 65 6d 20 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20  em *pIdx;.  Mem 
21b90 2a 70 56 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  *pVal;.  assert(
21ba0 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
21bb0 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
21bc0 3b 0a 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61  ;.  pIdx = &p->a
21bd0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
21be0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
21bf0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  0 && pOp->p2<=p-
21c00 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20  >nMem );.  pVal 
21c10 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
21c20 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
21c30 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pVal->flags & ME
21c40 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
21c50 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20  f( (pIdx->flags 
21c60 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
21c70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
21c80 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
21c90 70 49 64 78 29 3b 0a 20 20 20 20 69 66 28 20 28  pIdx);.    if( (
21ca0 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIdx->flags & ME
21cb0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
21cc0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
21cd0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
21ce0 6e 73 65 72 74 28 70 49 64 78 2d 3e 75 2e 70 52  nsert(pIdx->u.pR
21cf0 6f 77 53 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69  owSet, pVal->u.i
21d00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
21d10 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
21d20 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
21d30 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  *.**.** Extract 
21d40 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
21d50 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
21d60 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
21d70 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
21d80 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
21d90 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
21da0 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
21db0 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
21dc0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
21dd0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
21de0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
21df0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
21e00 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
21e10 2a 20 6a 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a  * jump, out3 */.
21e20 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69    Mem *pIdx;.  i
21e30 36 34 20 76 61 6c 3b 0a 20 20 61 73 73 65 72 74  64 val;.  assert
21e40 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
21e50 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
21e60 29 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  );.  CHECK_FOR_I
21e70 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 64 78  NTERRUPT;.  pIdx
21e80 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
21e90 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 64  >p1];.  if( (pId
21ea0 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  x->flags & MEM_R
21eb0 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
21ec0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
21ed0 78 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53  xt(pIdx->u.pRowS
21ee0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
21ef0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
21f00 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
21f10 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
21f20 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
21f30 28 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d  (pIdx);.    pc =
21f40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21f50 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
21f60 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
21f70 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
21f80 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
21f90 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
21fa0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
21fb0 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
21fc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21fd0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
21fe0 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 76  SetInt64(pOut, v
21ff0 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
22000 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
22010 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
22020 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  R./* Opcode: Con
22030 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a  textPush * * * .
22040 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20 63  **.** Save the c
22050 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e 74  urrent Vdbe cont
22060 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69 74  ext such that it
22070 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
22080 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f 70   by a ContextPop
22090 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  .** opcode. The 
220a0 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74  context stores t
220b0 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72  he last insert r
220c0 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20  ow id, the last 
220d0 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65  statement change
220e0 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74  .** count, and t
220f0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
22100 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e  ment change coun
22110 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
22120 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20 69  ntextPush: {.  i
22130 6e 74 20 69 20 3d 20 70 2d 3e 63 6f 6e 74 65 78  nt i = p->contex
22140 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20 43  tStackTop++;.  C
22150 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74  ontext *pContext
22160 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
22170 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58 20 4d 45  0 );.  /* FIX ME
22180 3a 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65  : This should be
22190 20 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 70 61   allocated as pa
221a0 72 74 20 6f 66 20 74 68 65 20 76 64 62 65 20 61  rt of the vdbe a
221b0 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
221c0 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d 3e 63 6f  /.  if( i>=p->co
221d0 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68 20  ntextStackDepth 
221e0 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78  ){.    p->contex
221f0 74 53 74 61 63 6b 44 65 70 74 68 20 3d 20 69 2b  tStackDepth = i+
22200 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78  1;.    p->contex
22210 74 53 74 61 63 6b 20 3d 20 73 71 6c 69 74 65 33  tStack = sqlite3
22220 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
22230 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  db, p->contextSt
22240 61 63 6b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ack,.           
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22270 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74 29 2a 28  izeof(Context)*(
22280 69 2b 31 29 29 3b 0a 20 20 20 20 69 66 28 20 70  i+1));.    if( p
22290 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 3d 3d  ->contextStack==
222a0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
222b0 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65 78 74 20  .  }.  pContext 
222c0 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  = &p->contextSta
222d0 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e 74 65 78  ck[i];.  pContex
222e0 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  t->lastRowid = d
222f0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
22300 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67  pContext->nChang
22310 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
22320 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22330 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f  pcode: ContextPo
22340 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52  p * * * .**.** R
22350 65 73 74 6f 72 65 20 74 68 65 20 56 64 62 65 20  estore the Vdbe 
22360 63 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20 73  context to the s
22370 74 61 74 65 20 69 74 20 77 61 73 20 69 6e 20 77  tate it was in w
22380 68 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68 20  hen contextPush 
22390 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63  was last.** exec
223a0 75 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65 78  uted. The contex
223b0 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73  t stores the las
223c0 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c  t insert row id,
223d0 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d   the last statem
223e0 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  ent.** change co
223f0 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72  unt, and the cur
22400 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63  rent statement c
22410 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a  hange count..*/.
22420 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50  case OP_ContextP
22430 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20  op: {.  Context 
22440 2a 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e  *pContext = &p->
22450 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70  contextStack[--p
22460 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
22470 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  p];.  assert( p-
22480 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70  >contextStackTop
22490 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73  >=0 );.  db->las
224a0 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65 78  tRowid = pContex
224b0 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  t->lastRowid;.  
224c0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f  p->nChange = pCo
224d0 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a  ntext->nChange;.
224e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
224f0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
22500 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
22510 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
22520 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
22530 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
22540 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
22550 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
22560 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
22570 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
22580 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63 75  aximum of its cu
22590 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61  rrent value.** a
225a0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
225b0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
225c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
225d0 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
225e0 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
225f0 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
22600 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
22610 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
22620 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
22630 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
22640 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
22650 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
22660 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
22670 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
22680 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
22690 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
226a0 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
226b0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
226c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
226d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
226e0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
226f0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
22700 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
22710 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
22720 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
22730 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
22740 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
22750 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
22760 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
22770 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
22780 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
22790 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
227a0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
227b0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
227c0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
227d0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
227e0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
227f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22800 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
22810 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
22820 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
22830 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
22840 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
22850 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
22860 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
22870 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
22880 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
22890 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
228a0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
228b0 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
228c0 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
228d0 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
228e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
228f0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
22900 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
22910 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
22920 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
22930 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
22940 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
22950 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
22960 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22970 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
22980 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
22990 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
229a0 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
229b0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
229c0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
229d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
229e0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
229f0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
22a00 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
22a10 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20  r P1 is exactly 
22a20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
22a30 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
22a40 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
22a50 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
22a60 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
22a70 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
22a80 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
22a90 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
22aa0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
22ab0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
22ac0 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
22ad0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22ae0 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
22af0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
22b00 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
22b10 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
22b20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
22b30 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
22b40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22b50 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
22b60 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
22b70 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
22b80 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
22b90 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
22ba0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
22bb0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
22bc0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
22bd0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
22be0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
22bf0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
22c00 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
22c10 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
22c20 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
22c30 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
22c40 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
22c50 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
22c60 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
22c70 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
22c80 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
22c90 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  nt n = pOp->p5;.
22ca0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
22cb0 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a 20 20 73  pMem, *pRec;.  s
22cc0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
22cd0 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
22ce0 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
22cf0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
22d00 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65    pRec = &p->aMe
22d10 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
22d20 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
22d30 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
22d40 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
22d50 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
22d60 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pRec++){.    apV
22d70 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
22d80 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
22d90 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pRec, encoding);
22da0 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63  .  }.  ctx.pFunc
22db0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
22dc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22dd0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
22de0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63  <=p->nMem );.  c
22df0 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
22e00 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
22e10 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
22e20 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
22e30 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
22e40 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e  .s.z = 0;.  ctx.
22e50 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  s.zMalloc = 0;. 
22e60 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
22e70 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
22e80 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
22e90 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
22ea0 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
22eb0 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
22ec0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
22ed0 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
22ee0 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
22ef0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22f00 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
22f10 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
22f20 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
22f30 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
22f40 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
22f50 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
22f60 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
22f70 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
22f80 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
22f90 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
22fa0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
22fb0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
22fc0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
22fd0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
22fe0 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
22ff0 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
23000 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
23010 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
23020 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61  (&ctx.s);.  brea
23030 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23040 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
23050 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
23060 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
23070 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
23080 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
23090 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
230a0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
230b0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
230c0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
230d0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
230e0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
230f0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
23100 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
23110 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
23120 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
23130 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
23140 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
23150 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
23160 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
23170 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
23180 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
23190 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
231a0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
231b0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
231c0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
231d0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
231e0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
231f0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
23200 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
23210 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
23220 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
23230 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
23240 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
23250 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
23260 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
23270 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23280 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
23290 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
232a0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
232b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
232c0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
232d0 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
232e0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
232f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
23300 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
23310 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
23320 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23330 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73 71  _ERROR ){.    sq
23340 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
23350 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
23360 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
23370 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
23380 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
23390 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
233a0 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
233b0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
233c0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
233d0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
233e0 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
233f0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
23400 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
23410 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e  ;.}...#if !defin
23420 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
23430 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
23440 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
23450 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
23460 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
23470 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
23480 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
23490 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
234a0 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
234b0 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
234c0 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
234d0 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
234e0 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
234f0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
23500 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
23510 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
23520 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c  uum: {.  if( sql
23530 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
23540 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
23550 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20  ue_to_misuse; . 
23560 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
23570 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
23580 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73  sg, db);.  if( s
23590 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
235a0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
235b0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
235c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
235d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
235e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
235f0 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
23600 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
23610 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
23620 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
23630 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
23640 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
23650 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
23660 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
23670 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
23680 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
23690 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
236a0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
236b0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
236c0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
236d0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
236e0 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
236f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23700 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
23710 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23720 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23730 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
23740 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
23750 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
23760 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
23770 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
23780 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
23790 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
237a0 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
237b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
237c0 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
237d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
237e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
237f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
23800 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
23810 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
23820 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
23830 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
23840 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
23850 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
23860 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
23870 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
23880 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
23890 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
238a0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
238b0 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
238c0 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
238d0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
238e0 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
238f0 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
23900 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
23910 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
23920 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
23930 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
23940 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
23950 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
23960 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
23970 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
23980 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
23990 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
239a0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
239b0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
239c0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
239d0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
239e0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
239f0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
23a00 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
23a10 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
23a20 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
23a30 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
23a40 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
23a50 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
23a60 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
23a70 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
23a80 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
23a90 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 20  **.** If P1 is  
23aa0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
23ab0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
23ac0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
23ad0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
23ae0 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
23af0 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
23b00 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
23b10 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
23b20 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
23b30 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
23b40 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
23b50 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
23b60 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
23b70 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
23b80 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
23b90 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
23ba0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
23bb0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
23bc0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
23bd0 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
23be0 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
23bf0 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
23c00 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
23c10 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
23c20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
23c30 3b 20 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c  ; .  u8 isWriteL
23c40 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
23c50 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e  3;.  assert( p1>
23c60 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
23c70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
23c80 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
23c90 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61  <<p1))!=0 );.  a
23ca0 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
23cb0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
23cc0 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72 63 20  Lock==1 );.  rc 
23cd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
23ce0 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
23cf0 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
23d00 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
23d10 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23d20 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 63  _LOCKED ){.    c
23d30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
23d40 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 73 71  Op->p4.z;.    sq
23d50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
23d60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
23d70 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
23d80 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20  is locked: %s", 
23d90 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  z);.  }.  break;
23da0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
23db0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
23dc0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
23dd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
23de0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
23df0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
23e00 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
23e10 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
23e20 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
23e30 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
23e40 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
23e50 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
23e60 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
23e70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
23e80 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
23e90 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
23ea0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
23eb0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
23ec0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
23ed0 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
23ee0 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
23ef0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
23f00 73 2c 20 73 65 74 20 74 68 65 0a 2a 2a 20 65 72  s, set the.** er
23f10 72 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c 49  ror code to SQLI
23f20 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
23f30 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
23f40 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
23f50 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
23f60 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
23f70 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
23f80 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  b, pVtab);.  if(
23f90 20 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73 71   pVtab ){.    sq
23fa0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
23fb0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
23fc0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
23fd0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
23fe0 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
23ff0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
24000 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
24010 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24020 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
24030 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24040 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
24050 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
24060 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
24070 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
24080 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
24090 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
240a0 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
240b0 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66  eate method.** f
240c0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
240d0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
240e0 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  e: {.  rc = sqli
240f0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
24100 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
24110 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45  Op->p4.z, &p->zE
24120 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b  rrMsg);.  break;
24130 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
24140 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
24150 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
24160 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
24170 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
24180 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
24190 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
241a0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
241b0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
241c0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
241d0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
241e0 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
241f0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
24200 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
24210 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61  oy: {.  p->inVta
24220 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72  bMethod = 2;.  r
24230 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
24240 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
24250 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
24260 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  z);.  p->inVtabM
24270 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65  ethod = 0;.  bre
24280 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
24290 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
242a0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
242b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
242c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
242d0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
242e0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
242f0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
24300 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
24310 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
24320 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
24330 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
24340 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
24350 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
24360 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
24370 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
24380 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
24390 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
243a0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
243b0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
243c0 73 6f 72 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20  sor *pCur = 0;. 
243d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
243e0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
243f0 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65  r = 0;..  sqlite
24400 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
24410 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
24420 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
24430 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
24440 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
24450 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
24460 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
24470 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20  pModule);.  if( 
24480 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
24490 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
244a0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
244b0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
244c0 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
244d0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
244e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
244f0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
24500 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
24510 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
24520 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
24530 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
24540 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
24550 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24560 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53  _misuse;.  if( S
24570 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
24580 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
24590 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
245a0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
245b0 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
245c0 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
245d0 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
245e0 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
245f0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
24600 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
24610 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
24620 31 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c  1, &pOp[-1], -1,
24630 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
24640 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
24650 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
24660 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
24670 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20    pCur->pModule 
24680 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
24690 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
246a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
246b0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
246c0 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64   = 1;.      pMod
246d0 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61  ule->xClose(pVta
246e0 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
246f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
24700 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24710 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24720 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
24730 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24740 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
24750 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
24760 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  P3 P4 *.**.** P1
24770 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
24780 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
24790 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
247a0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
247b0 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
247c0 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
247d0 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
247e0 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
247f0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
24800 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
24810 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
24820 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
24830 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
24840 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
24850 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
24860 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
24870 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
24880 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
24890 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
248a0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
248b0 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
248c0 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
248d0 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
248e0 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
248f0 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
24900 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
24910 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
24920 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
24930 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
24940 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
24950 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
24960 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
24970 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
24980 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
24990 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
249a0 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
249b0 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
249c0 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
249d0 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
249e0 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
249f0 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
24a00 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
24a10 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
24a20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
24a30 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
24a40 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
24a50 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
24a60 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
24a70 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
24a80 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
24a90 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
24aa0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
24ab0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
24ac0 4d 65 6d 20 2a 70 51 75 65 72 79 20 3d 20 26 70  Mem *pQuery = &p
24ad0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24ae0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 20 3d 20  .  Mem *pArgc = 
24af0 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 73 71  &pQuery[1];.  sq
24b00 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
24b10 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
24b20 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
24b30 70 56 74 61 62 3b 0a 0a 20 20 56 64 62 65 43 75  pVtab;..  VdbeCu
24b40 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
24b50 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24b60 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
24b70 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
24b80 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
24b90 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
24ba0 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  );.  pVtabCursor
24bb0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
24bc0 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  rsor;.  pVtab = 
24bd0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
24be0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
24bf0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
24c00 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
24c10 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
24c20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
24c30 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
24c40 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
24c50 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
24c60 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
24c70 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
24c80 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
24c90 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
24ca0 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
24cb0 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
24cc0 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
24cd0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20  {.    int res = 
24ce0 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  0;.    int i;.  
24cf0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20    Mem **apArg = 
24d00 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
24d10 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
24d20 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
24d30 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
24d40 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65  +1];.      store
24d50 54 79 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69  TypeInfo(apArg[i
24d60 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ], 0);.    }..  
24d70 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
24d80 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
24d90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
24da0 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74  isuse;.    sqlit
24db0 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62  e3VtabLock(pVtab
24dc0 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
24dd0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
24de0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
24df0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
24e00 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
24e10 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
24e20 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
24e30 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
24e40 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
24e50 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
24e60 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
24e70 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
24e80 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
24e90 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Msg = 0;.    sql
24ea0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64  ite3VtabUnlock(d
24eb0 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  b, pVtab);.    i
24ec0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24ed0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
24ee0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
24ef0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
24f00 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  }.    if( sqlite
24f10 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
24f20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24f30 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20 69  o_misuse;..    i
24f40 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
24f50 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
24f60 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
24f70 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
24f80 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ..  break;.}.#en
24f90 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
24fa0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
24fb0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
24fc0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24fd0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
24fe0 56 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  VRowid P1 P2 * *
24ff0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69   *.**.** Store i
25000 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
25010 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
25020 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
25030 6c 65 20 74 68 61 74 20 74 68 65 20 50 31 20 63  le that the P1 c
25040 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
25050 67 20 74 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  g to..*/.case OP
25060 5f 56 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  _VRowid: {      
25070 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
25080 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 73  rerelease */.  s
25090 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
250a0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
250b0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
250c0 75 6c 65 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  ule;.  sqlite_in
250d0 74 36 34 20 69 52 6f 77 3b 0a 20 20 56 64 62 65  t64 iRow;.  Vdbe
250e0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
250f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25100 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ;..  assert( pCu
25110 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
25120 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
25130 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
25140 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
25150 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
25160 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
25170 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
25180 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
25190 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
251a0 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  d );.  if( sqlit
251b0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
251c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
251d0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
251e0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
251f0 69 64 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  id(pCur->pVtabCu
25200 72 73 6f 72 2c 20 26 69 52 6f 77 29 3b 0a 20 20  rsor, &iRow);.  
25210 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
25220 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
25230 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
25240 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
25250 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
25260 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
25270 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
25280 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25290 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 4d 65 6d 53  o_misuse;.  MemS
252a0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
252b0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75   MEM_Int);.  pOu
252c0 74 2d 3e 75 2e 69 20 3d 20 69 52 6f 77 3b 0a 20  t->u.i = iRow;. 
252d0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
252e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
252f0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
25300 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25310 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25320 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
25330 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
25340 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
25350 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
25360 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
25370 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
25380 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
25390 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
253a0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
253b0 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
253c0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
253d0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
253e0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
253f0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
25400 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
25410 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
25420 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
25430 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
25440 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25450 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
25460 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25470 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
25480 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
25490 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
254a0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
254b0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e  ;.  pDest = &p->
254c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
254d0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
254e0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
254f0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
25500 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
25510 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
25520 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
25530 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
25540 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
25550 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
25560 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
25570 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
25580 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
25590 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a  of(sContext));..
255a0 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
255b0 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
255c0 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
255d0 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
255e0 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
255f0 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e  contents to sCon
25600 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73  text.s so in cas
25610 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
25620 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73  ion .  ** can us
25630 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  e the already al
25640 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
25650 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
25660 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77  ting a .  ** new
25670 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
25680 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
25690 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65  &sContext.s, pDe
256a0 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  st);.  MemSetTyp
256b0 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e  eFlag(&sContext.
256c0 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
256d0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
256e0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
256f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
25700 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  suse;.  rc = pMo
25710 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
25720 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
25730 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
25740 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  >p2);.  sqlite3D
25750 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
25760 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
25770 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
25780 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
25790 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f  ErrMsg = 0;..  /
257a0 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
257b0 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
257c0 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
257d0 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
257e0 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
257f0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
25800 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
25810 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e  red to ensure an
25820 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61  y.  ** dynamic a
25830 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f  llocation in sCo
25840 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73  ntext.s (a Mem s
25850 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61  truct) is  relea
25860 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
25870 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
25880 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e  oding(&sContext.
25890 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
258a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
258b0 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
258c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
258d0 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f  Move(pDest, &sCo
258e0 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50 44 41  ntext.s);.  UPDA
258f0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
25900 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
25910 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
25920 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  b) ){.    goto a
25930 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
25940 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  se;.  }.  if( sq
25950 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
25960 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
25970 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
25980 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
25990 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
259a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
259b0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
259c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
259d0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
259e0 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
259f0 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
25a00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
25a10 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
25a20 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
25a30 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
25a40 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
25a50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
25a60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
25a70 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
25a80 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
25a90 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
25aa0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
25ab0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
25ac0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
25ad0 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
25ae0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
25af0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
25b00 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
25b10 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
25b20 20 72 65 73 20 3d 20 30 3b 0a 0a 20 20 56 64 62   res = 0;..  Vdb
25b30 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
25b40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25b50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
25b60 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
25b70 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
25b80 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
25b90 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
25ba0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
25bb0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
25bc0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
25bd0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
25be0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
25bf0 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
25c00 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
25c10 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
25c20 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
25c30 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
25c40 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
25c50 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
25c60 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
25c70 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
25c80 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
25c90 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
25ca0 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
25cb0 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
25cc0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
25cd0 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
25ce0 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
25cf0 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
25d00 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
25d10 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
25d20 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
25d30 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
25d40 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
25d50 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
25d60 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
25d70 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
25d80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25d90 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74  _misuse;.  sqlit
25da0 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62  e3VtabLock(pVtab
25db0 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
25dc0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
25dd0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
25de0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25df0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
25e00 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
25e10 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
25e20 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
25e30 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
25e40 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
25e50 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
25e60 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  .  sqlite3VtabUn
25e70 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b  lock(db, pVtab);
25e80 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
25e90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
25ea0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
25eb0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25ec0 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  r);.  }.  if( sq
25ed0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
25ee0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
25ef0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
25f00 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20   if( !res ){.   
25f10 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
25f20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32  data, jump to P2
25f30 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
25f40 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
25f50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
25f60 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
25f70 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
25f80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25f90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
25fa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
25fb0 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
25fc0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
25fd0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
25fe0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
25ff0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
26000 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
26010 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
26020 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
26030 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
26040 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
26050 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
26060 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
26070 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
26080 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
26090 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
260a0 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
260b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
260c0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
260d0 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
260e0 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  e = &p->aMem[pOp
260f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26100 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
26110 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45  >xRename );.  RE
26120 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
26130 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20  ->p1, pName);.. 
26140 20 53 74 72 69 6e 67 69 66 79 28 70 4e 61 6d 65   Stringify(pName
26150 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20  , encoding);..  
26160 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
26170 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
26180 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
26190 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  use;.  sqlite3Vt
261a0 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
261b0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
261c0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
261d0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
261e0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
261f0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
26200 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
26210 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
26220 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
26230 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56   = 0;.  sqlite3V
26240 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56  tabUnlock(db, pV
26250 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tab);.  if( sqli
26260 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
26270 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26280 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62  _to_misuse;..  b
26290 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
262a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
262b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
262c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
262d0 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
262e0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
262f0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
26300 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
26310 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
26320 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
26330 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
26340 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
26350 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
26360 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
26370 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
26380 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
26390 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
263a0 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
263b0 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
263c0 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
263d0 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
263e0 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
263f0 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
26400 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
26410 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
26420 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
26430 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
26440 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
26450 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
26460 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
26470 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
26480 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
26490 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
264a0 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
264b0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
264c0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
264d0 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
264e0 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
264f0 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
26500 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
26510 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
26520 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
26530 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
26540 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
26550 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
26560 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
26570 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
26580 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
26590 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
265a0 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
265b0 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
265c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
265d0 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
265e0 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
265f0 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
26600 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
26610 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
26620 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
26630 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
26640 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
26650 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
26660 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
26670 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
26680 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
26690 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
266a0 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
266b0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
266c0 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
266d0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
266e0 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
266f0 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
26700 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
26710 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
26720 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20  te3_vtab *pVtab 
26730 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
26740 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
26750 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  e *pModule = (sq
26760 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
26770 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
26780 20 69 6e 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d   int nArg = pOp-
26790 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
267a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
267b0 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f  TAB );.  if( pMo
267c0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30  dule->xUpdate==0
267d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
267e0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
267f0 72 4d 73 67 2c 20 64 62 2c 20 22 72 65 61 64 2d  rMsg, db, "read-
26800 6f 6e 6c 79 20 74 61 62 6c 65 22 29 3b 0a 20 20  only table");.  
26810 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
26820 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ROR;.  }else{.  
26830 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c    int i;.    sql
26840 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
26850 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  .    Mem **apArg
26860 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
26870 20 4d 65 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61   Mem *pX = &p->a
26880 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26890 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
268a0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  g; i++){.      s
268b0 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 58 2c  toreTypeInfo(pX,
268c0 20 30 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67   0);.      apArg
268d0 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20  [i] = pX;.      
268e0 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  pX++;.    }.    
268f0 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
26900 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
26910 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
26920 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  use;.    sqlite3
26930 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
26940 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
26950 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
26960 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
26970 72 6f 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69  rowid);.    sqli
26980 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
26990 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
269a0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
269b0 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  b->zErrMsg;.    
269c0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
269d0 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
269e0 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56  tabUnlock(db, pV
269f0 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 73 71  tab);.    if( sq
26a00 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
26a10 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
26a20 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
26a30 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 26 26    if( pOp->p1 &&
26a40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
26a50 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
26a60 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
26a70 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
26a80 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
26a90 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
26aa0 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
26ab0 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43  .    }.    p->nC
26ac0 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62  hange++;.  }.  b
26ad0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
26ae0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
26af0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
26b00 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
26b10 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
26b20 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67  S./* Opcode: Pag
26b30 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a  ecount P1 P2 * *
26b40 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
26b50 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65  he current numbe
26b60 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61  r of pages in da
26b70 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d  tabase P1 to mem
26b80 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a  ory cell P2..*/.
26b90 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e  case OP_Pagecoun
26ba0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
26bb0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
26bc0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d  se */.  int p1 =
26bd0 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74   pOp->p1; .  int
26be0 20 6e 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20   nPage;.  Pager 
26bf0 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
26c00 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e  3BtreePager(db->
26c10 61 44 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20  aDb[p1].pBt);.. 
26c20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
26c30 65 72 50 61 67 65 63 6f 75 6e 74 28 70 50 61 67  erPagecount(pPag
26c40 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20 69  er, &nPage);.  i
26c50 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
26c60 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
26c70 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
26c80 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e     pOut->u.i = n
26c90 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Page;.  }.  brea
26ca0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
26cb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26cc0 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65  _TRACE./* Opcode
26cd0 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34  : Trace * * * P4
26ce0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63   *.**.** If trac
26cf0 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
26d00 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
26d10 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
26d20 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
26d30 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
26d40 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
26d50 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
26d60 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  ace callback..*/
26d70 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20  .case OP_Trace: 
26d80 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  {.  if( pOp->p4.
26d90 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  z ){.    if( db-
26da0 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  >xTrace ){.     
26db0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
26dc0 70 54 72 61 63 65 41 72 67 2c 20 70 4f 70 2d 3e  pTraceArg, pOp->
26dd0 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66  p4.z);.    }.#if
26de0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26df0 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  .    if( (db->fl
26e00 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c  ags & SQLITE_Sql
26e10 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20  Trace)!=0 ){.   
26e20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50     sqlite3DebugP
26e30 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65  rintf("SQL-trace
26e40 3a 20 25 73 5c 6e 22 2c 20 70 4f 70 2d 3e 70 34  : %s\n", pOp->p4
26e50 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  .z);.    }.#endi
26e60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
26e70 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  G */.  }.  break
26e80 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
26e90 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
26ea0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
26eb0 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
26ec0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
26ed0 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
26ee0 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
26ef0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
26f00 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
26f10 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
26f20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
26f30 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
26f40 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
26f50 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
26f60 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
26f70 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
26f80 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
26f90 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
26fa0 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
26fb0 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
26fc0 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
26fd0 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
26fe0 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
26ff0 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
27000 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
27010 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
27020 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
27030 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
27040 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  lain */.  break;
27050 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
27060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
270a0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
270b0 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
270c0 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
270d0 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
270e0 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
270f0 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
27100 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
27110 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
27120 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
27130 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
27140 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
27150 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
27160 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
27170 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
27180 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
27190 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
271a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
271b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
271c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
271d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
271e0 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
271f0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
27200 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
27210 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
27220 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
27230 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
27240 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
27250 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
27260 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
27270 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
27280 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
27290 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
272a0 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
272b0 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
272c0 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b  p->aOp[origPc]);
272d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65  .#endif.    }.#e
272e0 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
272f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
27300 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
27310 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
27320 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
27330 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
27340 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
27350 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
27360 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
27370 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
27380 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
27390 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
273a0 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
273b0 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
273c0 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
273d0 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
273e0 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
273f0 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
27400 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
27410 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  G.    assert( pc
27420 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  >=-1 && pc<p->nO
27430 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  p );..#ifdef SQL
27440 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
27450 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
27460 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
27470 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65  fprintf(p->trace
27480 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ,"rc=%d\n",rc);.
27490 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70        if( opProp
274a0 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
274b0 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a  2_PRERELEASE ){.
274c0 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
274d0 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
274e0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
274f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
27500 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f  ( opProperty & O
27510 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
27520 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
27530 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
27540 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p3, pOut);.   
27550 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
27560 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
27570 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
27580 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
27590 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
275a0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
275b0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
275c0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
275d0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
275e0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
275f0 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
27600 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
27610 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
27620 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
27630 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
27640 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
27650 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
27660 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  c;.  sqlite3Vdbe
27670 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
27680 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
27690 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
276a0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
276b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
276c0 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73  R;..  /* This is
276d0 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
276e0 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
276f0 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
27700 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
27710 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
27720 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
27730 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
27740 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
27750 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65  return:.  sqlite
27760 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79  3BtreeMutexArray
27770 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78  Leave(&p->aMutex
27780 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
27790 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
277a0 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
277b0 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
277c0 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
277d0 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
277e0 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
277f0 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
27800 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
27810 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
27820 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
27830 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
27840 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
27850 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
27860 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
27870 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
27880 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
27890 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
278a0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
278b0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
278c0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
278d0 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
278e0 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
278f0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
27900 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
27910 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
27920 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53  to here for an S
27930 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
27940 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  or..  */.abort_d
27950 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20  ue_to_misuse:.  
27960 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55  rc = SQLITE_MISU
27970 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  SE;.  /* Fall th
27980 72 75 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75  ru into abort_du
27990 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20  e_to_error */.. 
279a0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
279b0 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
279c0 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
279d0 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
279e0 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
279f0 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
27a00 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
27a10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27a20 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
27a30 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
27a40 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
27a50 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
27a60 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
27a70 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
27a80 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
27a90 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27aa0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
27ab0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
27ac0 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
27ad0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
27ae0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
27af0 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
27b00 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
27b10 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
27b20 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
27b30 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
27b40 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
27b50 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
27b60 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
27b70 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
27b80 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
27b90 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
27ba0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27bb0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
27bc0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
27bd0 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
27be0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
27bf0 3b 0a 7d 0a                                      ;.}.