/ Hex Artifact Content
Login

Artifact ee98938f76a3d9e513aca9696391c6e19fa2cafe:


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 32 20 32 30 30 38  e.c,v 1.802 2008
0850: 2f 31 32 2f 31 32 20 31 37 3a 35 36 3a 31 36 20  /12/12 17:56:16 
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 53  ther by the OP_S
0910: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, 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 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
aff0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
b000: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
b010: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b020: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
b030: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
b040: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
b050: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
b060: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
b070: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
b080: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
b090: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
b0a0: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
b0b0: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
b0c0: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
b0d0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
b0e0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
b0f0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
b100: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
b110: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
b120: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
b130: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
b140: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
b150: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b160: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
b170: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
b180: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
b190: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
b1a0: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67  ISMATCH;.      g
b1b0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
b1c0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
b1d0: 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  e{.      pc = pO
b1e0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
b1f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65  .  }else{.    Me
b200: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
b210: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  1, MEM_Int);.  }
b220: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b230: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
b240: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
b250: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
b260: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
b270: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
b280: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
b290: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
b2a0: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
b2b0: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
b2c0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
b2d0: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
b2e0: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
b2f0: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
b300: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
b310: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
b320: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
b330: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
b340: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
b350: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
b360: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
b370: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
b380: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
b390: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
b3a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
b3b0: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
b3c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
b3d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b3e0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
b3f0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
b400: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
b410: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
b420: 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20   Opcode: ToText 
b430: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b440: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
b450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b460: 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49  to be text..** I
b470: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
b480: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
b490: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75  it to a string u
b4a0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
b4b0: 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66  valent of printf
b4c0: 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73  ().  Blob values
b4d0: 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61   are unchanged a
b4e0: 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77  nd.** are afterw
b4f0: 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65  ards simply inte
b500: 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 2e  rpreted as text.
b510: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
b520: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
b530: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
b540: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
b550: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b560: 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20  _ToText: {      
b570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b580: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58  ame as TK_TO_TEX
b590: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
b5a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b5b0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
b5c0: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
b5d0: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
b5e0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
b5f0: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
b600: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
b610: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
b620: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
b630: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
b640: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
b650: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
b660: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
b670: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
b680: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
b690: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
b6a0: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
b6b0: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 29 3b  _Real|MEM_Blob);
b6c0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b6d0: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
b6e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b6f0: 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a  ode: ToBlob P1 *
b700: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
b710: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
b720: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
b730: 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20  e a BLOB..** If 
b740: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
b750: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
b760: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72   to a string fir
b770: 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61  st..** Strings a
b780: 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65  re simply reinte
b790: 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73  rpreted as blobs
b7a0: 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a   with no change.
b7b0: 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ** to the underl
b7c0: 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  ying data..**.**
b7d0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
b7e0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
b7f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
b800: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
b810: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f  */.case OP_ToBlo
b820: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
b830: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b840: 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31   TK_TO_BLOB, in1
b850: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
b860: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
b870: 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20   ) break;.  if( 
b880: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
b890: 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
b8a0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
b8b0: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
b8c0: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
b8d0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
b8e0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
b8f0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
b900: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 7d 0a  ocFailed );.  }.
b910: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b920: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
b930: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b940: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
b950: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b960: 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20  code: ToNumeric 
b970: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b980: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
b990: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b9a0: 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65  to be numeric (e
b9b0: 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65  ither an.** inte
b9c0: 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e  ger or a floatin
b9d0: 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29  g-point number.)
b9e0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
b9f0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
ba00: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
ba10: 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20   it to an using 
ba20: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
ba30: 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61  t of atoi() or a
ba40: 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20  tof() and store 
ba50: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
ba60: 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70  version .** is p
ba70: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
ba80: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
ba90: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
baa0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
bab0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
bac0: 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72  .case OP_ToNumer
bad0: 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ic: {           
bae0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
baf0: 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c  s TK_TO_NUMERIC,
bb00: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bb10: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
bb20: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d  M_Null|MEM_Int|M
bb30: 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  EM_Real))==0 ){.
bb40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
bb50: 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29  emNumerify(pIn1)
bb60: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
bb70: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
bb80: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
bb90: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
bba0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
bbb0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
bbc0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
bbd0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
bbe0: 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65   If.** The value
bbf0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20   is currently a 
bc00: 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f  real number, dro
bc10: 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c  p its fractional
bc20: 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65   part..** If the
bc30: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
bc40: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
bc50: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
bc60: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
bc70: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
bc80: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
bc90: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
bca0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
bcb0: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
bcc0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
bcd0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
bce0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
bcf0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
bd00: 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20  .case OP_ToInt: 
bd10: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
bd20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bd30: 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a  _TO_INT, in1 */.
bd40: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bd50: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
bd60: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
bd70: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
bd80: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
bd90: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
bda0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
bdb0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52  T./* Opcode: ToR
bdc0: 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eal P1 * * * *.*
bdd0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bde0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bdf0: 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61   P1 to be a floa
be00: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
be10: 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c  r..** If The val
be20: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
be30: 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76  an integer, conv
be40: 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68  ert it..** If th
be50: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
be60: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
be70: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
be80: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
be90: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
bea0: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
beb0: 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73  tore 0.0 if no s
bec0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
bed0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
bee0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
bef0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
bf00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
bf10: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
bf20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65  .*/.case OP_ToRe
bf30: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
bf40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bf50: 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e  s TK_TO_REAL, in
bf60: 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31  1 */.  if( (pIn1
bf70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
bf80: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
bf90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
bfa0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
bfb0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
bfc0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
bfd0: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
bfe0: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
bff0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
c000: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
c010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c020: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
c030: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
c040: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
c050: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
c060: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c070: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
c080: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
c090: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
c0a0: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
c0b0: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
c0c0: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
c0d0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
c0e0: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
c0f0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 20 69  then fall thru i
c100: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
c110: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
c120: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
c130: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
c140: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
c150: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
c160: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
c170: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
c180: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
c190: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
c1a0: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
c1b0: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
c1c0: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
c1d0: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
c1e0: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
c1f0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
c200: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
c210: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
c220: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
c230: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
c240: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
c250: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
c260: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
c270: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
c280: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
c290: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
c2a0: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
c2b0: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
c2c0: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
c2d0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c2e0: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
c2f0: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
c300: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
c310: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
c320: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
c330: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
c340: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
c350: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
c360: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
c370: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
c380: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
c390: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
c3a0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
c3b0: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
c3c0: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
c3d0: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
c3e0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
c3f0: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
c400: 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20   is  used to do 
c410: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
c420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
c430: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
c440: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
c450: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
c460: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
c470: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
c480: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
c490: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
c4a0: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
c4b0: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
c4c0: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
c4d0: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
c4e0: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
c4f0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
c500: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
c510: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
c520: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
c530: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lobs..**.** If t
c540: 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  he SQLITE_STOREP
c550: 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  2 bit of P5 is s
c560: 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20  et, then do not 
c570: 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a  jump.  Instead,.
c580: 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65  ** store a boole
c590: 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65  an result (eithe
c5a0: 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55  r 0, or 1, or NU
c5b0: 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20  LL) in register 
c5c0: 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P2..*/./* Opcode
c5d0: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
c5e0: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
c5f0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
c600: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
c610: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
c620: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
c630: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
c640: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c650: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
c660: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
c670: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
c680: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
c690: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
c6a0: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
c6b0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
c6c0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
c6d0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
c6e0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
c6f0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
c700: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
c710: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
c720: 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c  and P3 are equal
c730: 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20  ..** See the Lt 
c740: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
c750: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
c760: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
c770: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
c780: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
c790: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
c7a0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
c7b0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
c7c0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
c7d0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
c7e0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
c7f0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
c800: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
c810: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
c820: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
c830: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
c840: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
c850: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
c860: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
c870: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
c880: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
c890: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
c8a0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
c8b0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
c8c0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
c8d0: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
c8e0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
c8f0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
c900: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
c910: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
c920: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
c930: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
c940: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
c950: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
c960: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
c970: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
c980: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
c990: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
c9a0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
c9b0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
c9c0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
c9d0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
c9e0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
c9f0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ca00: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ca10: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ca20: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
ca30: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
ca40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ca50: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
ca60: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ca70: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
ca80: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ca90: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
caa0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
cab0: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
cac0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cad0: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
cae0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
caf0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
cb00: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cb10: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
cb20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
cb50: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
cb60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb80: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
cb90: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
cba0: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
cbb0: 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
cbc0: 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20 66 6c 61  affinity;..  fla
cbd0: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
cbe0: 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 0a 20  |pIn3->flags;.. 
cbf0: 20 69 66 28 20 66 6c 61 67 73 26 4d 45 4d 5f 4e   if( flags&MEM_N
cc00: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ull ){.    /* If
cc10: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
cc20: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
cc30: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
cc40: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2a 20 54  s NULL..    ** T
cc50: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cc60: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
cc70: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
cc80: 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20   set..    */.   
cc90: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
cca0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
ccb0: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70  .      pOut = &p
ccc0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
ccd0: 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70  .      MemSetTyp
cce0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
ccf0: 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 52 45 47  Null);.      REG
cd00: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
cd10: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
cd20: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
cd30: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
cd40: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 70  FNULL ){.      p
cd50: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
cd60: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
cd70: 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69 74 79 20    }..  affinity 
cd80: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
cd90: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 69  TE_AFF_MASK;.  i
cda0: 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20  f( affinity ){. 
cdb0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
cdc0: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
cdd0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
cde0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
cdf0: 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n3, affinity, en
ce00: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28  coding);.    if(
ce10: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
ce20: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
ce30: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
ce40: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
ce50: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
ce60: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
ce70: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
ce80: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
ce90: 70 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d 20 73  pIn3);.  res = s
cea0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
ceb0: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
cec0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73  ->p4.pColl);.  s
ced0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
cee0: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
cef0: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
cf00: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
cf10: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
cf20: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
cf30: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
cf40: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
cf50: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
cf60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
cf70: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
cf80: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
cf90: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
cfa0: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
cfb0: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
cfc0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
cfd0: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
cfe0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
cff0: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
d000: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
d010: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
d020: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
d030: 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ];.    MemSetTyp
d040: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d050: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
d060: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
d070: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d080: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
d090: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
d0a0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
d0b0: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
d0c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d0d0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
d0e0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
d0f0: 20 74 68 65 20 70 65 72 6d 75 61 74 69 6f 6e 20   the permuation 
d100: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
d110: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
d120: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
d130: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
d140: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
d150: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
d160: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
d170: 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d  the next OP_Perm
d180: 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70  utation, OP_Comp
d190: 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c  are,.** OP_Halt,
d1a0: 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77   or OP_ResultRow
d1b0: 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  .  Typically the
d1c0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
d1d0: 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20  should occur.** 
d1e0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
d1f0: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
d200: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
d210: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
d220: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
d230: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
d240: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
d250: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
d260: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
d270: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
d280: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
d290: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
d2a0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65   *.**.** Compare
d2b0: 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72   to vectors of r
d2c0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
d2d0: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
d2e0: 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f  ) (all this.** o
d2f0: 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  ne "A") and in r
d300: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
d310: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
d320: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
d330: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
d340: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
d350: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
d360: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  struct..**.** P4
d370: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
d380: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
d390: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
d3a0: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
d3b0: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
d3c0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
d3d0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
d3e0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
d3f0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
d400: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
d410: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
d420: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
d430: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
d440: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
d450: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
d460: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
d470: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
d480: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
d490: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
d4a0: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
d4b0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d4c0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d4d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
d4e0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 20  pare: {.  int n 
d4f0: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
d500: 20 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20 63 6f   i, p1, p2;.  co
d510: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
d520: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
d530: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
d540: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
d550: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
d560: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
d570: 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p1;.  assert( p1
d580: 3e 30 20 26 26 20 70 31 2b 6e 2d 31 3c 70 2d 3e  >0 && p1+n-1<p->
d590: 6e 4d 65 6d 20 29 3b 0a 20 20 70 32 20 3d 20 70  nMem );.  p2 = p
d5a0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
d5b0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 2d 31  ( p2>0 && p2+n-1
d5c0: 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 66 6f  <p->nMem );.  fo
d5d0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
d5e0: 7b 0a 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20  {.    int idx = 
d5f0: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
d600: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
d610: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
d620: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
d630: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
d640: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
d650: 20 20 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20      int bRev;   
d660: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
d670: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
d680: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20  rt order */.    
d690: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d6a0: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
d6b0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
d6c0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
d6d0: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
d6e0: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
d6f0: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
d700: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
d710: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
d720: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
d730: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
d740: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
d750: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
d760: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
d770: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
d780: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
d790: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
d7a0: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
d7b0: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
d7c0: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
d7d0: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
d7e0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
d7f0: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
d800: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d810: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
d820: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
d830: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
d840: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
d850: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
d860: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
d870: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
d880: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
d890: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
d8a0: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
d8b0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
d8c0: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
d8d0: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
d8e0: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
d8f0: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
d900: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
d910: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
d920: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
d930: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
d940: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
d950: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
d960: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
d970: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
d980: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
d990: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
d9a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d9b0: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
d9c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
d9d0: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
d9e0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
d9f0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
da00: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
da10: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
da20: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
da30: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
da40: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
da50: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
da60: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
da70: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
da80: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
da90: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
daa0: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
dab0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
dac0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
dad0: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
dae0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
daf0: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
db00: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
db10: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
db20: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
db30: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
db40: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
db50: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
db60: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
db70: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
db80: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
db90: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
dba0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
dbb0: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
dbc0: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
dbd0: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
dbe0: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
dbf0: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
dc00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dc10: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
dc20: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dc30: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
dc40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dc50: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
dc60: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
dc70: 2c 20 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46  , v2;    /* 0==F
dc80: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
dc90: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
dca0: 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31  L */..  if( pIn1
dcb0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dcc0: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
dcd0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
dce0: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
dcf0: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
dd00: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32  ;.  }.  if( pIn2
dd10: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dd20: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
dd30: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
dd40: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
dd50: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
dd60: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
dd70: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
dd80: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
dd90: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
dda0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
ddb0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
ddc0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
ddd0: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
dde0: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
ddf0: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
de00: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
de10: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
de20: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
de30: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
de40: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
de50: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
de60: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
de70: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
de80: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
de90: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
dea0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
deb0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
dec0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
ded0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
dee0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
def0: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
df00: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
df10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
df20: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
df30: 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61  an value.  Repla
df40: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
df50: 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s complement.  I
df60: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
df70: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
df80: 4c 4c 20 69 74 73 20 76 61 6c 75 65 0a 2a 2a 20  LL its value.** 
df90: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
dfa0: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dfc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
dfd0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  , in1 */.  if( p
dfe0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
dff0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
e000: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
e010: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
e020: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e030: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e040: 6e 31 2d 3e 75 2e 69 20 3d 20 21 70 49 6e 31 2d  n1->u.i = !pIn1-
e050: 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
e060: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e070: 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Int );.  break;.
e080: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
e090: 74 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tNot P1 * * * *.
e0a0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
e0b0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e0c0: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
e0d0: 20 69 6e 74 65 67 65 72 2e 20 20 52 65 70 6c 61   integer.  Repla
e0e0: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e0f0: 73 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  s ones-complemen
e100: 74 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  t.  If the value
e110: 20 69 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 4e   is originally N
e120: 55 4c 4c 2c 20 6c 65 61 76 65 0a 2a 2a 20 69 74  ULL, leave.** it
e130: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63   unchanged..*/.c
e140: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e160: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
e170: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
e180: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e190: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20  M_Null ) break; 
e1a0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74   /* Do nothing t
e1b0: 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c  o NULLs */.  sql
e1c0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e1d0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e1e0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 7e 70 49 6e 31  In1->u.i = ~pIn1
e1f0: 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  ->u.i;.  assert(
e200: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
e210: 5f 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b  _Int );.  break;
e220: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
e230: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
e240: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e250: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e260: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
e270: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
e280: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e290: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
e2a0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
e2b0: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
e2c0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e2d0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e2e0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e2f0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
e300: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
e310: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e320: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e330: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e340: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
e350: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e360: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e370: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
e380: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
e390: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
e3a0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e3b0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e3c0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e3d0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
e3e0: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
e3f0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e400: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
e410: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
e420: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e430: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69   */.  int c;.  i
e440: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e450: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e460: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
e470: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
e480: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e490: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
e4a0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e4b0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 23 65 6c 73  alue(pIn1);.#els
e4c0: 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
e4d0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
e4e0: 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
e4f0: 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
e500: 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
e510: 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
e520: 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
e530: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
e540: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e550: 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
e560: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e570: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e590: 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
e5a0: 2e 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61  .  If P3 is grea
e5b0: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f  ter.** than zero
e5c0: 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c  , then check all
e5d0: 20 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c   values reg(P1),
e5e0: 20 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20   reg(P1+1), .** 
e5f0: 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20  reg(P1+2), ..., 
e600: 72 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f  reg(P1+P3-1)..*/
e610: 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
e620: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e630: 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
e640: 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
e650: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
e660: 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
e670: 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p3==0 || pOp-
e680: 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20  >p1>0 );.  do{. 
e690: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e6a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
e6b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
e6c0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
e6d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e6e0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
e6f0: 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29  while( --n > 0 )
e700: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e710: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
e720: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e730: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
e740: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e750: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
e760: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
e770: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
e780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e790: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
e7a0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e7b0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e7c0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
e7d0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
e7e0: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
e7f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e800: 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  de: SetNumColumn
e810: 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  s * P2 * * *.**.
e820: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73  ** This opcode s
e830: 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ets the number o
e840: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
e850: 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  e cursor opened 
e860: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
e870: 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ing instruction 
e880: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  to P2..**.** An 
e890: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
e8a0: 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20   is only useful 
e8b0: 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d  if it occurs imm
e8c0: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
e8d0: 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  .** one of the f
e8e0: 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
e8f0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  :.**.**     Open
e900: 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  Read.**     Open
e910: 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65  Write.**     Ope
e920: 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66  nPseudo.**.** If
e930: 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
e940: 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65  pcode is to be e
e950: 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72  xecuted on a cur
e960: 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  sor, then.** thi
e970: 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  s opcode must be
e980: 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61   present immedia
e990: 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20  tely before the 
e9a0: 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f  opcode that.** o
e9b0: 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e  pens the cursor.
e9c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e  .*/.case OP_SetN
e9d0: 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62  umColumns: {.  b
e9e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e9f0: 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
ea00: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
ea10: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
ea20: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
ea30: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
ea40: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
ea50: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
ea60: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
ea70: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
ea80: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ea90: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
eaa0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
eab0: 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
eac0: 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
ead0: 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
eae0: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
eaf0: 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
eb00: 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
eb10: 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
eb20: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
eb30: 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
eb40: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
eb50: 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
eb60: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
eb70: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
eb80: 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
eb90: 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
eba0: 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
ebb0: 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
ebc0: 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
ebd0: 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
ebe0: 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
ebf0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
ec00: 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
ec10: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63  the result..*/.c
ec20: 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
ec30: 0a 20 20 69 6e 74 20 70 61 79 6c 6f 61 64 53 69  .  int payloadSi
ec40: 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ze;   /* Number 
ec50: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
ec60: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
ec70: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f  p1 = pOp->p1;  /
ec80: 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68  * P1 value of th
ec90: 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  e opcode */.  in
eca0: 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20  t p2 = pOp->p2; 
ecb0: 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
ecc0: 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
ecd0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
ece0: 43 20 3d 20 30 3b 2f 2a 20 54 68 65 20 56 44 42  C = 0;/* The VDB
ecf0: 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68  E cursor */.  ch
ed00: 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20  ar *zRec;       
ed10: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63   /* Pointer to c
ed20: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64  omplete record-d
ed30: 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ata */.  BtCurso
ed40: 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
ed50: 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
ed60: 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b  */.  u32 *aType;
ed70: 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65          /* aType
ed80: 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75  [i] holds the nu
ed90: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68  meric type of th
eda0: 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  e i-th column */
edb0: 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
edc0: 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
edd0: 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
ede0: 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
edf0: 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
ee00: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
ee10: 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72         /* number
ee20: 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
ee30: 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
ee40: 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
ee50: 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
ee60: 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
ee70: 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
ee80: 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eea0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
eeb0: 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20    char *zData;  
eec0: 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20       /* Part of 
eed0: 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
eee0: 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65   decoded */.  Me
eef0: 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
ef00: 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
ef10: 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
ef20: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
ef30: 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
ef40: 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
ef50: 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
ef60: 65 63 6f 64 65 64 20 2a 2f 0a 0a 20 20 6d 65 6d  ecoded */..  mem
ef70: 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
ef80: 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
ef90: 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
efa0: 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
efb0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
efc0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
efd0: 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
efe0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
eff0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f000: 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
f010: 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  );..  /* This bl
f020: 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
f030: 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
f040: 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
f050: 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
f060: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
f070: 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
f080: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
f090: 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
f0a0: 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
f0b0: 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
f0c0: 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
f0d0: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
f0e0: 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
f0f0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
f100: 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
f110: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
f120: 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
f130: 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
f140: 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
f150: 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
f160: 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
f170: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
f180: 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
f190: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
f1a0: 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
f1b0: 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
f1c0: 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
f1d0: 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
f1e0: 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
f1f0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
f200: 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
f210: 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
f220: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f230: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
f240: 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
f250: 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
f260: 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
f270: 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
f280: 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
f290: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
f2a0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
f2b0: 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
f2c0: 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
f2d0: 66 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  f.  if( pC->pCur
f2e0: 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  sor!=0 ){.    /*
f2f0: 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   The record is s
f300: 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65  tored in a B-Tre
f310: 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  e */.    rc = sq
f320: 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
f330: 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
f340: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
f350: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
f360: 0a 20 20 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20  .    zRec = 0;. 
f370: 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
f380: 43 75 72 73 6f 72 3b 0a 20 20 20 20 69 66 28 20  Cursor;.    if( 
f390: 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
f3a0: 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
f3b0: 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
f3c0: 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
f3d0: 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
f3e0: 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
f3f0: 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c  dSize = pC->payl
f400: 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a  oadSize;.      z
f410: 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d  Rec = (char*)pC-
f420: 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65  >aRow;.    }else
f430: 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
f440: 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 70 61   ){.      i64 pa
f450: 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20  yloadSize64;.   
f460: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
f470: 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
f480: 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
f490: 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
f4a0: 20 3d 20 28 69 6e 74 29 70 61 79 6c 6f 61 64 53   = (int)payloadS
f4b0: 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
f4c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
f4d0: 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
f4e0: 73 72 2c 20 28 75 33 32 20 2a 29 26 70 61 79 6c  sr, (u32 *)&payl
f4f0: 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  oadSize);.    }.
f500: 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d      nField = pC-
f510: 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  >nField;.  }else
f520: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
f530: 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b  ->pseudoTable );
f540: 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
f550: 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
f560: 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
f570: 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
f580: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
f590: 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
f5a0: 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
f5b0: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
f5c0: 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
f5d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
f5e0: 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
f5f0: 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69  ec!=0 );.    nFi
f600: 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
f610: 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b  ;.    pCrsr = 0;
f620: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
f630: 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
f640: 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
f650: 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
f660: 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
f670: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
f680: 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
f690: 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
f6a0: 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
f6b0: 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64   }.  if( payload
f6c0: 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Size>db->aLimit[
f6d0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
f6e0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
f6f0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
f700: 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65   assert( p2<nFie
f710: 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  ld );..  /* Read
f720: 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74   and parse the t
f730: 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74  able header.  St
f740: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ore the results 
f750: 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a  of the parse.  *
f760: 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  * into the recor
f770: 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66  d header cache f
f780: 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72  ields of the cur
f790: 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70  sor..  */.  aTyp
f7a0: 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
f7b0: 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
f7c0: 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
f7d0: 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74  r ){.    aOffset
f7e0: 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
f7f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38 20    }else{.    u8 
f800: 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a  *zIdx;        /*
f810: 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64   Index into head
f820: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a 45  er */.    u8 *zE
f830: 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20 50 6f  ndHdr;     /* Po
f840: 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
f850: 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
f860: 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ader */.    int 
f870: 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  offset;      /* 
f880: 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
f890: 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  data */.    int 
f8a0: 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a 20  szHdrSz;     /* 
f8b0: 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  Size of the head
f8c0: 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74  er size field at
f8d0: 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64   start of record
f8e0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76 61 69   */.    int avai
f8f0: 6c 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 75 6d 62  l = 0;   /* Numb
f900: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
f910: 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
f920: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  ..    assert(aTy
f930: 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66  pe);.    pC->aOf
f940: 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d  fset = aOffset =
f950: 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b   &aType[nField];
f960: 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64  .    pC->payload
f970: 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69  Size = payloadSi
f980: 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  ze;.    pC->cach
f990: 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
f9a0: 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46  heCtr;..    /* F
f9b0: 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61  igure out how ma
f9c0: 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20  ny bytes are in 
f9d0: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
f9e0: 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20    if( zRec ){.  
f9f0: 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63      zData = zRec
fa00: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
fa10: 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64     if( pC->isInd
fa20: 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  ex ){.        zD
fa30: 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  ata = (char*)sql
fa40: 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
fa50: 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
fa60: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
fa70: 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
fa80: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
fa90: 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
faa0: 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
fab0: 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20    }.      /* If 
fac0: 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46  KeyFetch()/DataF
fad0: 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74  etch() managed t
fae0: 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  o get the entire
faf0: 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20   payload,.      
fb00: 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c  ** save the payl
fb10: 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61  oad in the pC->a
fb20: 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74  Row cache.  That
fb30: 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72   will save us fr
fb40: 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69  om.      ** havi
fb50: 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74  ng to make addit
fb60: 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66  ional calls to f
fb70: 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74  etch the content
fb80: 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20   portion of.    
fb90: 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e    ** the record.
fba0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
fbb0: 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f  if( avail>=paylo
fbc0: 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
fbd0: 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
fbe0: 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
fbf0: 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
fc00: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fc10: 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
fc20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
fc30: 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
fc40: 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
fc50: 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
fc60: 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
fc70: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
fc80: 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
fc90: 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
fca0: 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
fcb0: 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
fcc0: 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
fcd0: 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
fce0: 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
fcf0: 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  Sz = getVarint32
fd00: 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66  ((u8*)zData, off
fd10: 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  set);..    /* Th
fd20: 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20  e KeyFetch() or 
fd30: 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76  DataFetch() abov
fd40: 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77  e are fast and w
fd50: 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69  ill get the enti
fd60: 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  re.    ** record
fd70: 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20   header in most 
fd80: 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79  cases.  But they
fd90: 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65   will fail to ge
fda0: 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20  t the complete. 
fdb0: 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
fdc0: 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72  der if the recor
fdd0: 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f  d header does no
fde0: 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  t fit on a singl
fdf0: 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e  e page.    ** in
fe00: 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68   the B-Tree.  Wh
fe10: 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c  en that happens,
fe20: 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65   use sqlite3Vdbe
fe30: 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74  MemFromBtree() t
fe40: 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65  o.    ** acquire
fe50: 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
fe60: 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a  ader text..    *
fe70: 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20  /.    if( !zRec 
fe80: 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20  && avail<offset 
fe90: 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
fea0: 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
feb0: 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
fec0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
fed0: 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
fee0: 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74 2c  Crsr, 0, offset,
fef0: 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
ff00: 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
ff10: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
ff20: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
ff30: 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
ff40: 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
ff50: 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d   = sMem.z;.    }
ff60: 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28  .    zEndHdr = (
ff70: 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66 73  u8 *)&zData[offs
ff80: 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  et];.    zIdx = 
ff90: 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
ffa0: 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53  drSz];..    /* S
ffb0: 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61  can the header a
ffc0: 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c  nd use it to fil
ffd0: 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d  l in the aType[]
ffe0: 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20   and aOffset[]. 
fff0: 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61     ** arrays.  a
10000 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  Type[i] will con
10010 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e  tain the type in
10020 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d  teger for the i-
10030 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  th.    ** column
10040 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
10050 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
10060 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
10070 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
10080 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
10090 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
100a0 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
100b0 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20   i-th column.   
100c0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
100d0 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
100e0 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
100f0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
10100 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
10110 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20  offset;.        
10120 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e  zIdx += getVarin
10130 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b  t32(zIdx, aType[
10140 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  i]);.        off
10150 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  set += sqlite3Vd
10160 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
10170 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
10180 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
10190 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73 20  /* If i is less 
101a0 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65  that nField, the
101b0 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  n there are less
101c0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a   fields in this.
101d0 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72          ** recor
101e0 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c  d than SetNumCol
101f0 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74  umns indicated t
10200 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73  here are columns
10210 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
10220 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68  ** table. Set th
10230 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79  e offset for any
10240 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e   extra columns n
10250 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20  ot present in.  
10260 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
10270 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74  ord to 0. This t
10280 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20  ells code below 
10290 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 0a  to store a NULL.
102a0 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 65          ** inste
102b0 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a  ad of deserializ
102c0 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d  ing a value from
102d0 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
102e0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
102f0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a  aOffset[i] = 0;.
10300 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10310 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10320 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
10330 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
10340 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20   MEM_Null;..    
10350 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65  /* If we have re
10360 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64  ad more header d
10370 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e  ata than was con
10380 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65  tained in the he
10390 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20  ader,.    ** or 
103a0 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
103b0 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
103c0 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20  ears to be past 
103d0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20  the end of the. 
103e0 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72     ** record, or
103f0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
10400 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
10410 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f  pears to be befo
10420 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a  re the end.    *
10430 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
10440 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73  (when all fields
10450 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20   present), then 
10460 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69  we must be deali
10470 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ng .    ** with 
10480 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
10490 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  se..    */.    i
104a0 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72 20  f( zIdx>zEndHdr 
104b0 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f 61  || offset>payloa
104c0 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c 20 28  dSize .     || (
104d0 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
104e0 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64   offset!=payload
104f0 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72  Size) ){.      r
10500 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
10510 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
10520 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10530 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
10540 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d  /* Get the colum
10550 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49  n information. I
10560 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
10570 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
10580 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a  .  ** deserializ
10590 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d  e the value from
105a0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20   the record. If 
105b0 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a  aOffset[p2] is z
105c0 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74  ero,.  ** then t
105d0 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f  here are not eno
105e0 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ugh fields in th
105f0 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69  e record to sati
10600 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71  sfy the.  ** req
10610 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63  uest.  In this c
10620 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c  ase, set the val
10630 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34  ue NULL or to P4
10640 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61   if P4 is.  ** a
10650 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65   pointer to a Me
10660 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20  m object..  */. 
10670 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d   if( aOffset[p2]
10680 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
10690 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
106a0 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
106b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
106c0 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
106d0 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  rnal(pDest);.   
106e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
106f0 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
10700 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
10710 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
10720 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
10730 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69        len = sqli
10740 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
10750 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b  eLen(aType[p2]);
10760 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10770 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
10780 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
10790 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
107a0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
107b0 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
107c0 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
107d0 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
107e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
107f0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
10800 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
10810 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
10820 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
10830 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10840 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a  SerialGet((u8*)z
10850 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c  Data, aType[p2],
10860 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20   pDest);.    }. 
10870 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
10880 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73  encoding;.  }els
10890 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e{.    if( pOp->
108a0 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
108b0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
108c0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
108d0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
108e0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
108f0 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
10900 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65       assert( pDe
10910 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
10920 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ll );.    }.  }.
10930 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61  .  /* If we dyna
10940 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
10950 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
10960 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
10970 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
10980 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
10990 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e  call above) then
109a0 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f   transfer contro
109b0 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64  l of that.  ** d
109c0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
109d0 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
109e0 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
109f0 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69  ucture..  ** Thi
10a00 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d  s prevents a mem
10a10 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20  ory copy..  */. 
10a20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f   if( sMem.zMallo
10a30 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  c ){.    assert(
10a40 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
10a50 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73  alloc );.    ass
10a60 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
10a70 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  ags & MEM_Dyn) )
10a80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  ;.    assert( !(
10a90 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
10aa0 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
10ab0 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d  )) || pDest->z==
10ac0 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44  sMem.z );.    pD
10ad0 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  est->flags &= ~(
10ae0 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74  MEM_Ephem|MEM_St
10af0 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74  atic);.    pDest
10b00 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
10b10 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  erm;.    pDest->
10b20 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  z = sMem.z;.    
10b30 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
10b40 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
10b50 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
10b60 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
10b70 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a  teable(pDest);..
10b80 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
10b90 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
10ba0 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
10bb0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
10bc0 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
10bd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10be0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
10bf0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
10c00 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
10c10 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
10c20 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
10c30 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
10c40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
10c50 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
10c60 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
10c70 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
10c80 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
10c90 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
10ca0 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
10cb0 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
10cc0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
10cd0 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
10ce0 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
10cf0 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
10d00 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 41  ty: {.  char *zA
10d10 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
10d20 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  4.z;.  Mem *pDat
10d30 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  a0 = &p->aMem[pO
10d40 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70  p->p1];.  Mem *p
10d50 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 70  Last = &pData0[p
10d60 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d 65 6d  Op->p2-1];.  Mem
10d70 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72 28 70   *pRec;..  for(p
10d80 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
10d90 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
10da0 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  {.    ExpandBlob
10db0 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70 70 6c  (pRec);.    appl
10dc0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
10dd0 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70  zAffinity[pRec-p
10de0 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  Data0], encoding
10df0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10e00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
10e10 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
10e20 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
10e30 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
10e40 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
10e50 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c   P1 into a singl
10e60 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74 61  e entry.** suita
10e70 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20 61  ble for use as a
10e80 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20   data record in 
10e90 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
10ea0 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20   or as a key.** 
10eb0 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68  in an index.  Th
10ec0 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
10ed0 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72 65   format are irre
10ee0 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61  levant as long a
10ef0 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c 75  s.** the OP_Colu
10f00 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
10f10 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
10f20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72 20  later..** Refer 
10f30 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63  to source code c
10f40 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  omments for the 
10f50 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 72  details of the r
10f60 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e  ecord.** format.
10f70 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
10f80 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
10f90 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
10fa0 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63  long.  The nth c
10fb0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
10fc0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
10fd0 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
10fe0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
10ff0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
11000 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64  the nth.** field
11010 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
11020 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
11030 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
11040 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
11050 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
11060 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
11070 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
11080 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
11090 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
110a0 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
110b0 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
110c0 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a   affinity NONE..
110d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
110e0 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41 73  ecord: {.  /* As
110f0 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
11100 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
11110 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
11120 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
11130 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
11140 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
11150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
11190 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
111a0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
111b0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
111c0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
111d0 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
111e0 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
111f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
11230 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
11240 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
11250 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
11260 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
11270 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
11280 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20   and so froth.. 
11290 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
112a0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
112b0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
112c0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
112d0 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
112e0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
112f0 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
11300 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11310 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
11320 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
11330 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
11340 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
11350 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
11360 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
11370 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
11380 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75 38 20  ata0..  */.  u8 
11390 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
113a0 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
113b0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
113c0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
113d0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
113e0 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
113f0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
11400 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
11410 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
11420 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11430 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
11440 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d 20 30  /.  int nHdr = 0
11450 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
11460 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
11470 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
11480 0a 20 20 69 36 34 20 6e 42 79 74 65 20 3d 20 30  .  i64 nByte = 0
11490 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74  ;         /* Dat
114a0 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
114b0 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
114c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 20   */.  int nZero 
114d0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
114e0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
114f0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
11500 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
11510 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
11520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11530 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11540 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
11550 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
11560 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
11570 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
11580 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
11590 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
115a0 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
115b0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
115c0 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
115d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
115e0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
115f0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
11600 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
11610 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
11620 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
11630 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
11640 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
11650 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
11660 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
11670 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
11680 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
11690 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
116a0 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
116b0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
116e0 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f   zNewRecord[] */
116f0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ..  nField = pOp
11700 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
11710 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
11720 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
11730 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
11740 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
11750 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
11760 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
11770 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
11780 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
11790 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
117a0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
117b0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
117c0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
117d0 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
117e0 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
117f0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
11800 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
11810 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
11820 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
11830 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
11840 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
11850 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
11860 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
11870 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
11880 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20     int len;.    
11890 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
118a0 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
118b0 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
118c0 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
118d0 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
118e0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
118f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
11900 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
11910 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11920 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
11930 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
11940 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
11950 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11960 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
11970 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
11980 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
11990 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
119a0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
119b0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
119c0 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
119d0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
119e0 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
119f0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
11a00 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
11a10 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
11a20 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
11a30 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
11a40 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
11a50 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
11a60 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
11a70 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
11a80 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
11a90 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
11aa0 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
11ab0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
11ac0 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
11ad0 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
11ae0 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
11af0 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
11b00 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
11b10 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
11b20 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
11b30 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
11b40 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
11b50 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
11b60 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
11b70 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
11b80 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
11b90 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
11ba0 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
11bb0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
11bc0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
11bd0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
11be0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
11bf0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
11c00 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
11c10 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
11c20 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
11c30 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
11c40 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
11c50 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
11c60 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
11c70 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
11c80 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
11c90 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
11ca0 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
11cb0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
11cc0 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
11cd0 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
11ce0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
11cf0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ed)..  */.  asse
11d00 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
11d10 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
11d20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
11d30 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
11d40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11d50 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
11d60 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
11d70 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
11d80 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
11d90 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
11da0 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
11db0 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
11dc0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
11dd0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
11de0 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
11df0 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
11e00 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
11e10 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73  ; pRec++){.    s
11e20 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
11e30 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
11e40 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
11e50 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
11e60 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
11e70 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
11e80 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f  al_type);      /
11e90 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
11ea0 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d  .  }.  for(pRec=
11eb0 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
11ec0 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f  ast; pRec++){  /
11ed0 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f  * serial data */
11ee0 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65  .    i += sqlite
11ef0 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
11f00 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28  zNewRecord[i], (
11f10 69 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70  int)(nByte-i), p
11f20 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29  Rec,file_format)
11f30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
11f40 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  i==nByte );..  a
11f50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
11f60 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
11f70 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
11f80 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
11f90 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
11fa0 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
11fb0 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
11fc0 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
11fd0 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
11fe0 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
11ff0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
12000 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
12010 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
12020 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
12030 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
12040 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
12050 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
12060 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
12070 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
12080 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
12090 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
120a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
120b0 65 3a 20 53 74 61 74 65 6d 65 6e 74 20 50 31 20  e: Statement P1 
120c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65  * * * *.**.** Be
120d0 67 69 6e 20 61 6e 20 69 6e 64 69 76 69 64 75 61  gin an individua
120e0 6c 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  l statement tran
120f0 73 61 63 74 69 6f 6e 20 77 68 69 63 68 20 69 73  saction which is
12100 20 70 61 72 74 20 6f 66 20 61 20 6c 61 72 67 65   part of a large
12110 72 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  r.** transaction
12120 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65 64 65  .  This is neede
12130 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 73 74  d so that the st
12140 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61 6e 20 62  atement.** can b
12150 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
12160 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
12170 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
12180 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
12190 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
121a0 6f 6e 2e 20 20 54 68 65 20 73 74 61 74 65 6d 65  on.  The stateme
121b0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  nt transaction w
121c0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
121d0 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77 68 65 6e  y.** commit when
121e0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
121f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
12200 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12210 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  n is currently i
12220 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
12230 65 20 28 74 68 61 74 20 0a 2a 2a 20 69 73 20 74  e (that .** is t
12240 6f 20 73 61 79 2c 20 69 66 20 69 74 20 69 73 20  o say, if it is 
12250 69 6e 20 62 65 74 77 65 65 6e 20 42 45 47 49 4e  in between BEGIN
12260 20 61 6e 64 20 43 4f 4d 4d 49 54 29 0a 2a 2a 20   and COMMIT).** 
12270 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72 65  and if there are
12280 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65   no other active
12290 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74   statements on t
122a0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
122b0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  .** connection, 
122c0 74 68 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  then this operat
122d0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  ion is a no-op. 
122e0 20 4e 6f 20 73 74 61 74 65 6d 65 6e 74 20 74 72   No statement tr
122f0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 69 73 20  ansaction.** is 
12300 6e 65 65 64 65 64 20 73 69 6e 63 65 20 61 6e 79  needed since any
12310 20 65 72 72 6f 72 20 63 61 6e 20 75 73 65 20 74   error can use t
12320 68 65 20 6e 6f 72 6d 61 6c 20 52 4f 4c 4c 42 41  he normal ROLLBA
12330 43 4b 20 70 72 6f 63 65 73 73 20 74 6f 0a 2a 2a  CK process to.**
12340 20 75 6e 64 6f 20 63 68 61 6e 67 65 73 2e 0a 2a   undo changes..*
12350 2a 0a 2a 2a 20 49 66 20 61 20 73 74 61 74 65 6d  *.** If a statem
12360 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
12370 69 73 20 73 74 61 72 74 65 64 2c 20 74 68 65 6e  is started, then
12380 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6a 6f 75   a statement jou
12390 72 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20 77 69 6c  rnal file.** wil
123a0 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61  l be allocated a
123b0 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0a  nd initialized..
123c0 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  **.** The statem
123d0 65 6e 74 20 69 73 20 62 65 67 75 6e 20 6f 6e 20  ent is begun on 
123e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
123f0 65 20 77 69 74 68 20 69 6e 64 65 78 20 50 31 2e  e with index P1.
12400 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61    The main.** da
12410 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
12420 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 61 6e  an index of 0 an
12430 64 20 74 68 65 20 66 69 6c 65 20 75 73 65 64 20  d the file used 
12440 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
12450 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61 6e 20 69  bles.** has an i
12460 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f 0a 63 61  ndex of 1..*/.ca
12470 73 65 20 4f 50 5f 53 74 61 74 65 6d 65 6e 74 3a  se OP_Statement:
12480 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74   {.  if( db->aut
12490 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
124a0 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
124b0 31 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  1 ){.    int i =
124c0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 42 74   pOp->p1;.    Bt
124d0 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 61 73  ree *pBt;.    as
124e0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
124f0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
12500 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
12510 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ].pBt!=0 );.    
12520 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  pBt = db->aDb[i]
12530 2e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  .pBt;.    assert
12540 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
12550 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
12560 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
12570 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
12580 69 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  i))!=0 );.    if
12590 28 20 21 73 71 6c 69 74 65 33 42 74 72 65 65 49  ( !sqlite3BtreeI
125a0 73 49 6e 53 74 6d 74 28 70 42 74 29 20 29 7b 0a  sInStmt(pBt) ){.
125b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
125c0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
125d0 28 70 42 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  (pBt);.      p->
125e0 6f 70 65 6e 65 64 53 74 61 74 65 6d 65 6e 74 20  openedStatement 
125f0 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
12600 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12610 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
12620 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
12630 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
12640 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
12650 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
12660 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
12670 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
12680 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
12690 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
126a0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
126b0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
126c0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
126d0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
126e0 74 68 65 6e 20 74 68 65 20 43 4f 4d 4d 49 54 20  then the COMMIT 
126f0 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 73 74 61 74  or ROLLBACK stat
12700 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 2a 2a 0a  ement fails..**.
12710 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
12720 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
12730 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
12740 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
12750 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
12760 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
12770 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 72 6f 6c  p->p1;.  int rol
12780 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
12790 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 20  .  int turnOnAC 
127a0 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
127b0 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
127c0 43 6f 6d 6d 69 74 3b 0a 0a 20 20 61 73 73 65 72  Commit;..  asser
127d0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
127e0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
127f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
12800 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
12810 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
12820 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30  1 || rollback==0
12830 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64   );..  assert( d
12840 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
12850 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
12860 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
12870 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
12880 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 72  f( turnOnAC && r
12890 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61  ollback && db->a
128a0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29  ctiveVdbeCnt>1 )
128b0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
128c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
128d0 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
128e0 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
128f0 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
12900 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
12910 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
12920 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
12930 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
12940 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
12950 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
12960 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
12970 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
12980 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
12990 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
129a0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
129b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
129c0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
129d0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
129e0 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
129f0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
12a00 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e  }else if( turnOn
12a10 41 43 20 26 26 20 21 72 6f 6c 6c 62 61 63 6b 20  AC && !rollback 
12a20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  && db->writeVdbe
12a30 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20  Cnt>1 ){.    /* 
12a40 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
12a50 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
12a60 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
12a70 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
12a80 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
12a90 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
12aa0 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
12ab0 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
12ac0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
12ad0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
12ae0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
12af0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
12b00 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
12b10 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
12b20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
12b30 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
12b40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12b50 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
12b60 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
12b70 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
12b80 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 70  mit ){.    if( p
12b90 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 20 20  Op->p2 ){.      
12ba0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
12bb0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a  utoCommit==1 );.
12bc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c        sqlite3Rol
12bd0 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
12be0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
12bf0 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
12c00 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
12c10 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
12c20 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
12c30 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
12c40 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
12c50 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
12c60 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
12c70 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
12c80 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
12c90 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
12ca0 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
12cb0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
12cc0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
12cd0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
12ce0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
12cf0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
12d00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12d10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
12d20 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
12d30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
12d40 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
12d50 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
12d60 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
12d70 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
12d80 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
12d90 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
12da0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
12db0 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
12dc0 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
12dd0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
12de0 22 3a 28 0a 20 20 20 20 20 20 20 20 28 72 6f 6c  ":(.        (rol
12df0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
12e00 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
12e10 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
12e20 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
12e30 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
12e40 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
12e50 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
12e60 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
12e70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12e80 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
12e90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12ea0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
12eb0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
12ec0 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
12ed0 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61  ion.  The transa
12ee0 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20  ction ends when 
12ef0 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c  a Commit or Roll
12f00 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69  back.** opcode i
12f10 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20  s encountered.  
12f20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  Depending on the
12f30 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74   ON CONFLICT set
12f40 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61  ting, the.** tra
12f50 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61  nsaction might a
12f60 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  lso be rolled ba
12f70 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ck if an error i
12f80 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
12f90 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
12fa0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
12fb0 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
12fc0 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
12fd0 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
12fe0 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
12ff0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
13000 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
13010 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
13020 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
13030 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
13040 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
13050 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
13060 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
13070 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ses..**.** If P2
13080 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
13090 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
130a0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
130b0 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c  d.  A RESERVED l
130c0 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e  ock is.** obtain
130d0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
130e0 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77  se file when a w
130f0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
13100 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f   is started.  No
13110 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73  .** other proces
13120 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74  s can start anot
13130 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61  her write transa
13140 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73  ction while this
13150 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
13160 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74  ** underway.  St
13170 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74  arting a write t
13180 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20  ransaction also 
13190 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61  creates a rollba
131a0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a  ck journal. A.**
131b0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
131c0 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
131d0 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68  ed before any ch
131e0 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
131f0 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  e to the.** data
13200 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20  base.  If P2 is 
13210 32 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65  2 or greater the
13220 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
13230 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61  ock is also obta
13240 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66  ined.** on the f
13250 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ile..**.** If P2
13260 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
13270 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
13280 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
13290 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
132a0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
132b0 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ion: {.  int i =
132c0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65   pOp->p1;.  Btre
132d0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
132e0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d  t( i>=0 && i<db-
132f0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
13300 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
13310 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a  & (1<<i))!=0 );.
13320 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
13330 69 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  i].pBt;..  if( p
13340 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
13350 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
13360 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
13370 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
13380 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
13390 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
133a0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
133b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
133c0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
133d0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
133e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
133f0 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c  TE_OK && rc!=SQL
13400 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20  ITE_READONLY /* 
13410 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  && rc!=SQLITE_BU
13420 53 59 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67  SY */ ){.      g
13430 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13440 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
13450 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
13460 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
13470 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
13480 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
13490 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
134a0 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
134b0 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
134c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
134d0 50 33 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68  P3==0 is the sch
134e0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
134f0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
13500 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
13510 33 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f  3==2 is the reco
13520 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
13530 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
13540 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
13550 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
13560 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
13570 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
13580 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
13590 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
135a0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
135b0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 65 67  .** If P1 is neg
135c0 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 69 73  ative, then this
135d0 20 69 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   is a request to
135e0 20 72 65 61 64 20 74 68 65 20 73 69 7a 65 20 6f   read the size o
135f0 66 20 61 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  f a.** databases
13600 20 66 72 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d   free-list. P3 m
13610 75 73 74 20 62 65 20 73 65 74 20 74 6f 20 31 20  ust be set to 1 
13620 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 54 68  in this case. Th
13630 65 20 61 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61  e actual.** data
13640 62 61 73 65 20 61 63 63 65 73 73 65 64 20 69 73  base accessed is
13650 20 28 28 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f   ((P1+1)*-1). Fo
13660 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 50 31 20  r example, a P1 
13670 70 61 72 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a  parameter of -1.
13680 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ** corresponds t
13690 6f 20 64 61 74 61 62 61 73 65 20 30 20 28 22 6d  o database 0 ("m
136a0 61 69 6e 22 29 2c 20 61 20 50 31 20 6f 66 20 2d  ain"), a P1 of -
136b0 32 20 69 73 20 64 61 74 61 62 61 73 65 20 31 20  2 is database 1 
136c0 28 22 74 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20  ("temp")..**.** 
136d0 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
136e0 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
136f0 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
13700 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
13710 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
13720 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
13730 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
13740 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
13750 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
13760 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
13770 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
13780 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
13790 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
137a0 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ase */.  int iMe
137b0 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  ta;.  int iDb = 
137c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69  pOp->p1;.  int i
137d0 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
137e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
137f0 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
13800 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66  REE_META );.  if
13810 28 20 69 44 62 3c 30 20 29 7b 0a 20 20 20 20 69  ( iDb<0 ){.    i
13820 44 62 20 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29  Db = (-1*(iDb+1)
13830 29 3b 0a 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a  );.    iCookie *
13840 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65  = -1;.  }.  asse
13850 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
13860 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
13870 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
13880 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
13890 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
138a0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
138b0 29 21 3d 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65  )!=0 );.  /* The
138c0 20 69 6e 64 65 78 69 6e 67 20 6f 66 20 6d 65 74   indexing of met
138d0 61 20 76 61 6c 75 65 73 20 61 74 20 74 68 65 20  a values at the 
138e0 73 63 68 65 6d 61 20 6c 61 79 65 72 20 69 73 20  schema layer is 
138f0 6f 66 66 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a  off by one from.
13900 20 20 2a 2a 20 74 68 65 20 69 6e 64 65 78 69 6e    ** the indexin
13910 67 20 69 6e 20 74 68 65 20 62 74 72 65 65 20 6c  g in the btree l
13920 61 79 65 72 2e 20 20 54 68 65 20 62 74 72 65 65  ayer.  The btree
13930 20 63 6f 6e 73 69 64 65 72 73 20 6d 65 74 61 5b   considers meta[
13940 30 5d 20 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68  0] to.  ** be th
13950 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65  e number of free
13960 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
13970 74 61 62 61 73 65 20 28 61 20 72 65 61 64 2d 6f  tabase (a read-o
13980 6e 6c 79 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20  nly value).  ** 
13990 61 6e 64 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62  and meta[1] to b
139a0 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  e the schema coo
139b0 6b 69 65 2e 20 20 54 68 65 20 73 63 68 65 6d 61  kie.  The schema
139c0 20 6c 61 79 65 72 20 63 6f 6e 73 69 64 65 72 73   layer considers
139d0 0a 20 20 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f  .  ** meta[1] to
139e0 20 62 65 20 74 68 65 20 73 63 68 65 6d 61 20 63   be the schema c
139f0 6f 6f 6b 69 65 2e 20 20 53 6f 20 77 65 20 68 61  ookie.  So we ha
13a00 76 65 20 74 6f 20 73 68 69 66 74 20 74 68 65 20  ve to shift the 
13a10 69 6e 64 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e  index.  ** by on
13a20 65 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e in the followi
13a30 6e 67 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ng statement..  
13a40 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
13a50 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
13a60 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
13a70 31 20 2b 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  1 + iCookie, (u3
13a80 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
13a90 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
13aa0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
13ab0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
13ac0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
13ad0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
13ae0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
13af0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
13b00 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
13b10 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72  ster P3 (interpr
13b20 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
13b30 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b  er).** into cook
13b40 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
13b50 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
13b60 50 32 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68  P2==0 is the sch
13b70 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
13b80 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
13b90 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
13ba0 32 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f  2==2 is the reco
13bb0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
13bc0 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
13bd0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
13be0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
13bf0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
13c00 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
13c10 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
13c20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
13c30 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
13c40 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
13c50 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
13c60 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
13c70 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
13c80 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
13c90 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
13ca0 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
13cb0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
13cc0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
13cd0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
13ce0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
13cf0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
13d00 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
13d10 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
13d20 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
13d30 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
13d40 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
13d50 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
13d60 42 74 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  Bt!=0 );.  sqlit
13d70 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
13d80 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
13d90 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
13da0 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
13db0 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
13dc0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
13dd0 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
13de0 70 44 62 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d  pDb->pBt, 1+pOp-
13df0 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
13e00 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
13e10 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  >p2==0 ){.    /*
13e20 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
13e30 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
13e40 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
13e50 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
13e60 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
13e70 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
13e80 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
13e90 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
13ea0 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
13eb0 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
13ec0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
13ed0 32 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52  2==1 ){.    /* R
13ee0 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
13ef0 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
13f00 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
13f10 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
13f20 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
13f30 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
13f40 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
13f50 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
13f60 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
13f70 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
13f80 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
13f90 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
13fa0 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
13fb0 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
13fc0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
13fd0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
13fe0 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  b);.  }.  break;
13ff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
14000 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50  erifyCookie P1 P
14010 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  2 *.**.** Check 
14020 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f  the value of glo
14030 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72  bal database par
14040 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20  ameter number 0 
14050 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76  (the.** schema v
14060 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65  ersion) and make
14070 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61   sure it is equa
14080 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31  l to P2.  .** P1
14090 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
140a0 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
140b0 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20   0 for the main 
140c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
140d0 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66   and 1 for the f
140e0 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70  ile holding temp
140f0 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
14100 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d   some higher num
14110 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c  ber.** for auxil
14120 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a  iary databases..
14130 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  **.** The cookie
14140 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
14150 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
14160 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
14170 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
14180 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
14190 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
141a0 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
141b0 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
141c0 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
141d0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
141e0 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
141f0 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
14200 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  Either a transac
14210 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61  tion needs to ha
14220 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20  ve been started 
14230 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65  or an OP_Open ne
14240 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65  eds.** to be exe
14250 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c  cuted (to establ
14260 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29  ish a read lock)
14270 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63   before this opc
14280 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65  ode is.** invoke
14290 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65  d..*/.case OP_Ve
142a0 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  rifyCookie: {.  
142b0 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74 72  int iMeta;.  Btr
142c0 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65 72  ee *pBt;.  asser
142d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
142e0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
142f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
14300 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
14310 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
14320 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
14330 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
14340 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
14350 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
14360 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 31  eeGetMeta(pBt, 1
14370 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
14380 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
14390 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
143a0 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20     iMeta = 0;.  
143b0 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
143c0 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d  TE_OK && iMeta!=
143d0 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73  pOp->p2 ){.    s
143e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
143f0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
14400 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
14410 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
14420 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
14430 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
14440 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
14450 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
14460 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
14470 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
14480 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
14490 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
144a0 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
144b0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
144c0 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
144d0 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
144e0 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
144f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
14500 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
14510 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
14520 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
14530 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
14540 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
14550 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
14560 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
14570 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
14580 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
14590 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
145a0 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
145b0 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
145c0 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
145d0 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
145e0 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
145f0 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
14600 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
14610 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
14620 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
14630 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
14640 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
14650 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
14660 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
14670 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
14680 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
14690 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
146a0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
146b0 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
146c0 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
146d0 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
146e0 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
146f0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
14700 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
14710 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
14720 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
14730 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
14740 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
14750 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
14760 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
14770 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
14780 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
14790 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
147a0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
147b0 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72 63  ents(db);.    rc
147c0 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
147d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
147e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
147f0 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
14800 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  4 P5.**.** Open 
14810 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
14820 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
14830 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
14840 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
14850 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
14860 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
14870 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
14880 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
14890 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
148a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
148b0 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
148c0 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
148d0 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
148e0 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
148f0 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
14900 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
14910 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
14920 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
14930 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
14940 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
14950 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
14960 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
14970 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
14980 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
14990 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
149a0 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
149b0 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
149c0 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
149d0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
149e0 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
149f0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
14a00 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
14a10 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
14a20 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
14a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
14a40 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
14a50 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
14a60 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
14a70 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
14a80 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
14a90 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
14aa0 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
14ab0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
14ac0 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
14ad0 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
14ae0 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
14af0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
14b00 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
14b10 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
14b20 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
14b30 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
14b40 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
14b50 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
14b60 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
14b70 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
14b80 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
14b90 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
14ba0 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
14bb0 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
14bc0 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
14bd0 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
14be0 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
14bf0 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
14c00 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
14c10 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
14c20 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
14c30 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
14c40 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
14c50 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
14c60 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
14c70 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e  he.** content an
14c80 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  d collating sequ
14c90 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73 2e  ence of indices.
14ca0 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72    P4 is NULL for
14cb0 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74   cursors.** that
14cc0 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e   are not pointin
14cd0 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a  g to indices..**
14ce0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
14cf0 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
14d00 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
14d10 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
14d20 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
14d30 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
14d40 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
14d50 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
14d60 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
14d70 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
14d80 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
14d90 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
14da0 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
14db0 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
14dc0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
14dd0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
14de0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
14df0 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
14e00 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
14e10 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  and collating se
14e20 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65  quence of indice
14e30 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66  s.  P4 is NULL f
14e40 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68  or cursors.** th
14e50 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74  at are not point
14e60 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a  ing to indices..
14e70 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
14e80 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
14e90 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
14ea0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
14eb0 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
14ec0 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
14ed0 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
14ee0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
14ef0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
14f00 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
14f10 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
14f20 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
14f30 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
14f40 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
14f50 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
14f60 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
14f70 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
14f80 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  rite: {.  int i 
14f90 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74  = pOp->p1;.  int
14fa0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
14fb0 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
14fc0 70 33 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  p3;.  int wrFlag
14fd0 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
14fe0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
14ff0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  r;.  Db *pDb;.  
15000 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
15010 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
15020 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
15030 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
15040 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
15050 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
15060 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
15070 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
15080 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
15090 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
150a0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
150b0 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
150c0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
150d0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
150e0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
150f0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
15100 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
15110 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
15120 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
15130 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15140 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
15150 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
15160 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p5 ){.    assert
15170 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
15180 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65  sert( p2<=p->nMe
15190 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  m );.    pIn2 = 
151a0 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20  &p->aMem[p2];.  
151b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
151c0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
151d0 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
151e0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn2->u.i;.    i
151f0 66 28 20 70 32 3c 32 20 29 20 7b 0a 20 20 20 20  f( p2<2 ) {.    
15200 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
15210 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
15220 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
15230 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
15240 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69  .  }.  assert( i
15250 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  >=0 );.  pCur = 
15260 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
15270 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 69  , i, &pOp[-1], i
15280 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  Db, 1);.  if( pC
15290 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
152a0 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
152b0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
152c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
152d0 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
152e0 61 67 2c 20 70 4f 70 2d 3e 70 34 2e 70 2c 20 70  ag, pOp->p4.p, p
152f0 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
15300 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15310 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
15320 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e      pCur->pKeyIn
15330 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
15340 79 49 6e 66 6f 3b 0a 20 20 20 20 70 43 75 72 2d  yInfo;.    pCur-
15350 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
15360 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 7d   ENC(p->db);.  }
15370 65 6c 73 65 7b 0a 20 20 20 20 70 43 75 72 2d 3e  else{.    pCur->
15380 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
15390 7d 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29  }.  switch( rc )
153a0 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
153b0 45 5f 42 55 53 59 3a 20 7b 0a 20 20 20 20 20 20  E_BUSY: {.      
153c0 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
153d0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
153e0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
153f0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15400 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  rn;.    }.    ca
15410 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 7b 0a  se SQLITE_OK: {.
15420 20 20 20 20 20 20 69 6e 74 20 66 6c 61 67 73 20        int flags 
15430 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c  = sqlite3BtreeFl
15440 61 67 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f  ags(pCur->pCurso
15450 72 29 3b 0a 20 20 20 20 20 20 2f 2a 20 53 61 6e  r);.      /* San
15460 69 74 79 20 63 68 65 63 6b 69 6e 67 2e 20 20 4f  ity checking.  O
15470 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 66 6f  nly the lower fo
15480 75 72 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ur bits of the f
15490 6c 61 67 73 20 62 79 74 65 20 73 68 6f 75 6c 64  lags byte should
154a0 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 75 73 65  .      ** be use
154b0 64 2e 20 20 42 69 74 20 33 20 28 6d 61 73 6b 20  d.  Bit 3 (mask 
154c0 30 78 30 38 29 20 69 73 20 75 6e 70 72 65 64 69  0x08) is unpredi
154d0 63 74 61 62 6c 65 2e 20 20 54 68 65 20 6c 6f 77  ctable.  The low
154e0 65 72 20 33 20 62 69 74 73 0a 20 20 20 20 20 20  er 3 bits.      
154f0 2a 2a 20 28 6d 61 73 6b 20 30 78 30 37 29 20 73  ** (mask 0x07) s
15500 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65 72 20  hould be either 
15510 35 20 28 69 6e 74 6b 65 79 2b 6c 65 61 66 64 61  5 (intkey+leafda
15520 74 61 20 66 6f 72 20 74 61 62 6c 65 73 29 20 6f  ta for tables) o
15530 72 0a 20 20 20 20 20 20 2a 2a 20 32 20 28 7a 65  r.      ** 2 (ze
15540 72 6f 64 61 74 61 20 66 6f 72 20 69 6e 64 69 63  rodata for indic
15550 65 73 29 2e 20 20 49 66 20 74 68 65 73 65 20 63  es).  If these c
15560 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20 6e 6f  onditions are no
15570 74 20 6d 65 74 20 69 74 20 63 61 6e 0a 20 20 20  t met it can.   
15580 20 20 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61 6e 20     ** only mean 
15590 74 68 61 74 20 77 65 20 61 72 65 20 64 65 61 6c  that we are deal
155a0 69 6e 67 20 77 69 74 68 20 61 20 63 6f 72 72 75  ing with a corru
155b0 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
155c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
155d0 69 66 28 20 28 66 6c 61 67 73 20 26 20 30 78 66  if( (flags & 0xf
155e0 30 29 21 3d 30 20 7c 7c 20 28 28 66 6c 61 67 73  0)!=0 || ((flags
155f0 20 26 20 30 78 30 37 29 21 3d 35 20 26 26 20 28   & 0x07)!=5 && (
15600 66 6c 61 67 73 20 26 20 30 78 30 37 29 21 3d 32  flags & 0x07)!=2
15610 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
15620 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
15630 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
15640 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15650 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
15660 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61        pCur->isTa
15670 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26 20 42  ble = (flags & B
15680 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20  TREE_INTKEY)!=0 
15690 3f 31 3a 30 3b 0a 20 20 20 20 20 20 70 43 75 72  ?1:0;.      pCur
156a0 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66 6c 61  ->isIndex = (fla
156b0 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52 4f 44  gs & BTREE_ZEROD
156c0 41 54 41 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20  ATA)!=0 ?1:0;.  
156d0 20 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20      /* If P4==0 
156e0 69 74 20 6d 65 61 6e 73 20 77 65 20 61 72 65 20  it means we are 
156f0 65 78 70 65 63 74 65 64 20 74 6f 20 6f 70 65 6e  expected to open
15700 20 61 20 74 61 62 6c 65 2e 20 20 49 66 20 50 34   a table.  If P4
15710 21 3d 30 20 74 68 65 6e 0a 20 20 20 20 20 20 2a  !=0 then.      *
15720 2a 20 77 65 20 65 78 70 65 63 74 20 74 6f 20 62  * we expect to b
15730 65 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64  e opening an ind
15740 65 78 2e 20 20 49 66 20 74 68 69 73 20 69 73 20  ex.  If this is 
15750 6e 6f 74 20 77 68 61 74 20 68 61 70 70 65 6e 65  not what happene
15760 64 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  d,.      ** then
15770 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
15780 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a   corrupt.      *
15790 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 75  /.      if( (pCu
157a0 72 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70 4f  r->isTable && pO
157b0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
157c0 59 49 4e 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c  YINFO).       ||
157d0 20 28 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20   (pCur->isIndex 
157e0 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d  && pOp->p4type!=
157f0 50 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20  P4_KEYINFO) ){. 
15800 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15810 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15820 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15830 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15840 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
15850 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
15860 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50   case SQLITE_EMP
15870 54 59 3a 20 7b 0a 20 20 20 20 20 20 70 43 75 72  TY: {.      pCur
15880 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
15890 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
158a0 4e 46 4f 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  NFO;.      pCur-
158b0 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72  >isIndex = !pCur
158c0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20 20 20  ->isTable;.     
158d0 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d   pCur->pCursor =
158e0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   0;.      rc = S
158f0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
15900 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
15910 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
15920 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
15930 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
15940 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
15950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
15960 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
15970 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
15980 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
15990 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
159a0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
159b0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
159c0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
159d0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
159e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
159f0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
15a00 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f 72 20  he transient or 
15a10 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
15a20 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
15a30 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
15a40 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
15a50 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
15a60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
15a70 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69  olumns in the vi
15a80 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  rtual table..** 
15a90 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
15aa0 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
15ab0 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
15ac0 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
15ad0 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
15ae0 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
15af0 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
15b00 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
15b10 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
15b20 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
15b30 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
15b40 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
15b50 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
15b60 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
15b70 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
15b80 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
15b90 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
15ba0 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
15bb0 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
15bc0 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
15bd0 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
15be0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
15bf0 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
15c00 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
15c10 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
15c20 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
15c30 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
15c40 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
15c50 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
15c60 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
15c70 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f  l-table idea..*/
15c80 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
15c90 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20  emeral: {.  int 
15ca0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
15cb0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
15cc0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
15cd0 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20 0a  nt openFlags = .
15ce0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
15cf0 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
15d00 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
15d10 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
15d20 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
15d30 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
15d40 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
15d50 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
15d60 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
15d70 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65  IENT_DB;..  asse
15d80 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43  rt( i>=0 );.  pC
15d90 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
15da0 6f 72 28 70 2c 20 69 2c 20 70 4f 70 2c 20 2d 31  or(p, i, pOp, -1
15db0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
15dc0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
15dd0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
15de0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
15df0 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79  ite3BtreeFactory
15e00 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49 54  (db, 0, 1, SQLIT
15e10 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43  E_DEFAULT_TEMP_C
15e20 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e 46  ACHE_SIZE, openF
15e30 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20 20  lags,.          
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20 69   &pCx->pBt);.  i
15e60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
15e70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
15e80 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
15e90 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
15ea0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
15eb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15ec0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
15ed0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
15ee0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
15ef0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
15f00 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
15f10 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
15f20 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f 44   the BTREE_ZEROD
15f30 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  ATA flag before.
15f40 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
15f50 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
15f60 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
15f70 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
15f80 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
15f90 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
15fa0 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
15fb0 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45 59  age 1 (an INTKEY
15fc0 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
15fd0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
15fe0 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20  pKeyInfo ){.    
15ff0 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
16000 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
16010 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
16020 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
16030 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
16040 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
16050 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 5a  , &pgno, BTREE_Z
16060 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20 20  ERODATA); .     
16070 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
16080 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
16090 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
160a0 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
160b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
160c0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
160d0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
160e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e   (KeyInfo*)pOp->
16110 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73  p4.z, pCx->pCurs
16120 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78  or);.        pCx
16130 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
16140 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
16150 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
16160 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
16170 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  p->db);.      }.
16180 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
16190 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  le = 0;.    }els
161a0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
161b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
161c0 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45  (pCx->pBt, MASTE
161d0 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43  R_ROOT, 1, 0, pC
161e0 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
161f0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
16200 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
16210 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
16220 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  !pCx->isTable;. 
16230 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16240 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
16250 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
16260 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
16270 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
16280 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
16290 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
162a0 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
162b0 66 20 64 61 74 61 2e 20 20 41 6e 79 20 61 74 74  f data.  Any att
162c0 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
162d0 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66 20 64 61  second row of da
162e0 74 61 20 63 61 75 73 65 73 20 74 68 65 0a 2a 2a  ta causes the.**
162f0 20 66 69 72 73 74 20 72 6f 77 20 74 6f 20 62 65   first row to be
16300 20 64 65 6c 65 74 65 64 2e 20 20 41 6c 6c 20 64   deleted.  All d
16310 61 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 77  ata is deleted w
16320 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
16330 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  s.** closed..**.
16340 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
16350 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
16360 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 66  s opcode is usef
16370 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e 67 20 74  ul for holding t
16380 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c 44  he.** NEW or OLD
16390 20 74 61 62 6c 65 73 20 69 6e 20 61 20 74 72 69   tables in a tri
163a0 67 67 65 72 2e 20 20 41 6c 73 6f 20 75 73 65 64  gger.  Also used
163b0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 61 20 73   to hold the a s
163c0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
163d0 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
163e0 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
163f0 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
16400 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
16410 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
16420 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
16430 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
16440 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e 73 65 72  ** When OP_Inser
16450 74 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  t is executed to
16460 20 69 6e 73 65 72 74 20 61 20 72 6f 77 20 69 6e   insert a row in
16470 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 20 74   to the pseudo t
16480 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20 70 73 65  able,.** the pse
16490 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
164a0 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
164b0 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e 20 63 6f  make it's own co
164c0 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 72 69  py of the.** ori
164d0 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20  ginal row data. 
164e0 49 66 20 50 32 20 69 73 20 30 2c 20 74 68 65 6e  If P2 is 0, then
164f0 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
16500 65 20 77 69 6c 6c 20 63 6f 70 79 20 74 68 65 0a  e will copy the.
16510 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20  ** original row 
16520 64 61 74 61 2e 20 4f 74 68 65 72 77 69 73 65 2c  data. Otherwise,
16530 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
16540 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65 6d 6f 72  e original memor
16550 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f  y cell.** is sto
16560 72 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  red. In this cas
16570 65 2c 20 74 68 65 20 76 64 62 65 20 70 72 6f 67  e, the vdbe prog
16580 72 61 6d 20 6d 75 73 74 20 65 6e 73 75 72 65 20  ram must ensure 
16590 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  that the .** mem
165a0 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74 61 69 6e  ory cell contain
165b0 69 6e 67 20 74 68 65 20 72 6f 77 20 64 61 74 61  ing the row data
165c0 20 69 73 20 6e 6f 74 20 6f 76 65 72 77 72 69 74   is not overwrit
165d0 74 65 6e 20 75 6e 74 69 6c 20 74 68 65 0a 2a 2a  ten until the.**
165e0 20 70 73 65 75 64 6f 20 74 61 62 6c 65 20 69 73   pseudo table is
165f0 20 63 6c 6f 73 65 64 20 28 6f 72 20 61 20 6e 65   closed (or a ne
16600 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65  w row is inserte
16610 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a 2f 0a 63  d into it)..*/.c
16620 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
16630 6f 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  o: {.  int i = p
16640 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
16650 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 61 73 73  rsor *pCx;.  ass
16660 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70  ert( i>=0 );.  p
16670 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
16680 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f 70 5b 2d  sor(p, i, &pOp[-
16690 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  1], -1, 0);.  if
166a0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
166b0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
166c0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
166d0 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 3d  x->pseudoTable =
166e0 20 31 3b 0a 20 20 70 43 78 2d 3e 65 70 68 65 6d   1;.  pCx->ephem
166f0 50 73 65 75 64 6f 54 61 62 6c 65 20 3d 20 28 75  PseudoTable = (u
16700 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  8)pOp->p2;.  pCx
16710 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
16720 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
16730 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
16740 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
16750 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
16760 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
16770 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
16780 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
16790 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
167a0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
167b0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
167c0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
167d0 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74  P_Close: {.  int
167e0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
167f0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
16800 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
16810 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
16820 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
16830 43 73 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70  Csr[i]);.  p->ap
16840 43 73 72 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72  Csr[i] = 0;.  br
16850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16860 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20  e: SeekGe P1 P2 
16870 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
16880 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
16890 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
168a0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
168b0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
168c0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
168d0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
168e0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
168f0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
16900 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
16910 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
16920 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
16930 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
16940 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
16950 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
16960 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
16970 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
16980 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
16990 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
169a0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
169b0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
169c0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
169d0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
169e0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
169f0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
16a00 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
16a10 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
16a20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
16a30 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
16a40 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
16a50 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
16a60 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
16a70 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
16a80 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
16a90 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
16aa0 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50  : SeekGt P1 P2 P
16ab0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
16ac0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
16ad0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
16ae0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
16af0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
16b00 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
16b10 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
16b20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
16b30 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
16b40 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
16b50 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
16b60 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
16b70 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
16b80 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
16b90 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
16ba0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
16bb0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
16bc0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
16bd0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
16be0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
16bf0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
16c00 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
16c10 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
16c20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
16c30 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
16c40 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
16c50 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
16c60 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
16c70 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
16c80 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
16c90 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
16ca0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
16cb0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
16cc0 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20  code: SeekLt P1 
16cd0 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a  P2 P3 P4 * .**.*
16ce0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
16cf0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
16d00 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
16d10 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
16d20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
16d30 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
16d40 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
16d50 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
16d60 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
16d70 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
16d80 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
16d90 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
16da0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
16db0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
16dc0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
16dd0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
16de0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
16df0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
16e00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
16e10 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
16e20 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
16e30 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
16e40 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
16e50 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
16e60 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
16e70 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
16e80 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
16e90 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
16ea0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
16eb0 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
16ec0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
16ed0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
16ee0 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32  de: SeekLe P1 P2
16ef0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
16f00 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
16f10 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
16f20 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
16f30 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
16f40 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
16f50 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
16f60 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
16f70 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
16f80 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
16f90 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
16fa0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
16fb0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
16fc0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
16fd0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
16fe0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
16ff0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
17000 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
17010 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
17020 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
17030 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
17040 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
17050 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
17060 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
17070 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
17080 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
17090 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
170a0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
170b0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
170c0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
170d0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
170e0 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
170f0 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
17100 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
17110 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20  e OP_SeekLt:    
17120 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
17130 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
17140 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLe:         /* 
17150 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
17160 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20  e OP_SeekGe:    
17170 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
17180 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
17190 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGt: {       /* 
171a0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
171b0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
171c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
171d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
171e0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
171f0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
17200 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
17210 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b  C = p->apCsr[i];
17220 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
17230 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   );.  if( pC->pC
17240 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20  ursor!=0 ){.    
17250 69 6e 74 20 72 65 73 2c 20 6f 63 3b 0a 20 20 20  int res, oc;.   
17260 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
17270 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e;.    pC->nullR
17280 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  ow = 0;.    if( 
17290 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
172a0 20 20 20 20 20 69 36 34 20 69 4b 65 79 3b 20 20       i64 iKey;  
172b0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
172c0 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
172d0 74 6f 20 2a 2f 0a 0a 20 20 20 20 20 20 2f 2a 20  to */..      /* 
172e0 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
172f0 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
17300 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
17310 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
17320 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62  g,.      ** blob
17330 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
17340 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
17350 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
17360 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20   we can do.     
17370 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
17380 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20   covert it. */. 
17390 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
173a0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b  cAffinity(pIn3);
173b0 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71  .      iKey = sq
173c0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
173d0 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70  e(pIn3);.      p
173e0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
173f0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49  = 0;..      /* I
17400 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
17410 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
17420 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
17430 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
17440 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
17450 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
17460 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
17470 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
17480 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .. */.      if( 
17490 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
174a0 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
174b0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
174c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
174d0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
174e0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
174f0 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
17500 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
17510 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
17520 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a  ber,.          *
17530 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
17540 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
17550 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
17560 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  /.          pc =
17570 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17580 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
17590 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
175a0 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
175b0 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e  this point, then
175c0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
175d0 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
175e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e  .        ** poin
175f0 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20  t number. */.   
17600 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49       assert( (pI
17610 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
17620 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20  Real)!=0 );..   
17630 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53       if( iKey==S
17640 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26  MALLEST_INT64 &&
17650 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c   (pIn3->r<(doubl
17660 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e  e)iKey || pIn3->
17670 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  r>0) ){.        
17680 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75    /* The P3 valu
17690 65 20 69 73 20 74 6f 20 6c 61 72 67 65 20 69 6e  e is to large in
176a0 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65   magnitude to be
176b0 20 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e   expressed as an
176c0 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  .          ** in
176d0 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  teger. */.      
176e0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
176f0 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
17700 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  >r<0 ){.        
17710 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53      if( oc==OP_S
17720 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
17730 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20  SeekGe ){.      
17740 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17750 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
17760 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
17770 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
17780 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17790 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
177a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
177b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
177c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
177d0 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d           if( oc=
177e0 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
177f0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20  ==OP_SeekLe ){. 
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
17810 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
17820 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
17830 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
17840 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
17850 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
17860 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17870 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
17880 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17890 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
178a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20  .            pc 
178b0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
178c0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
178d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
178e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63      }else if( oc
178f0 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
17900 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a  c==OP_SeekGe ){.
17910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
17920 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66   the ceiling() f
17930 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
17940 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
17950 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
17960 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29  n3->r > (double)
17970 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20  iKey ) iKey++;. 
17980 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
17990 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
179a0 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74  he floor() funct
179b0 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72  ion to convert r
179c0 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20  eal->int */.    
179d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
179e0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f  ==OP_SeekLe || o
179f0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
17a00 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
17a10 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29  n3->r < (double)
17a20 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20  iKey ) iKey--;. 
17a30 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
17a40 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c   .      rc = sql
17a50 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
17a60 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
17a70 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
17a80 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
17a90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17aa0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17ab0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17ac0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
17ad0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
17ae0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  0 ){.        pC-
17af0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17b00 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c  1;.        pC->l
17b10 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
17b20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
17b30 73 65 7b 0a 20 20 20 20 20 20 55 6e 70 61 63 6b  se{.      Unpack
17b40 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20  edRecord r;.    
17b50 20 20 69 6e 74 20 6e 46 69 65 6c 64 20 3d 20 70    int nField = p
17b60 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20  Op->p4.i;.      
17b70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
17b80 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
17b90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
17ba0 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20  Field>0 );.     
17bb0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
17bc0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
17bd0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
17be0 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20 20 20 20  6)nField;.      
17bf0 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
17c00 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
17c10 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 2e  Le ){.        r.
17c20 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
17c30 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20  _INCRKEY;.      
17c40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
17c50 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
17c60 20 20 7d 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d    }.      r.aMem
17c70 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
17c80 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d  >p3];.      rc =
17c90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
17ca0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
17cb0 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
17cc0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
17cd0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17ce0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
17cf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17d00 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
17d10 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
17d20 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  alid = 0;.    }.
17d30 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
17d40 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
17d50 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
17d60 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
17d70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
17d80 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
17d90 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
17da0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3d  ndif.    if( oc=
17db0 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
17dc0 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 7b 0a 20  ==OP_SeekGt ){. 
17dd0 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c       if( res<0 |
17de0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
17df0 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20  =OP_SeekGt) ){. 
17e00 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17e10 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
17e20 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
17e30 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
17e40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17e50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17e60 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43  rror;.        pC
17e70 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
17e80 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
17e90 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
17ea0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
17eb0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
17ec0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc==OP_SeekLt
17ed0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
17ee0 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  e );.      if( r
17ef0 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
17f00 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  && oc==OP_SeekLt
17f10 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
17f20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
17f30 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
17f40 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
17f50 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17f60 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17f70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17f80 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
17f90 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
17fa0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17fb0 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
17fc0 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
17fd0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
17fe0 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
17ff0 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65  o.        ** see
18000 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
18010 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  case..        */
18020 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73  .        res = s
18030 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
18040 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
18050 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
18060 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
18070 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20   );.    if( res 
18080 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
18090 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
180a0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 21 70 43  .  }else if( !pC
180b0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
180c0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
180d0 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70  pens when attemp
180e0 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65  ting to open the
180f0 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20   sqlite3_master 
18100 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72  table.    ** for
18110 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65 74   read access ret
18120 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
18130 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  Y. In this case 
18140 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61  always.    ** ta
18150 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e  ke the jump (sin
18160 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  ce there are no 
18170 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
18180 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
18190 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
181a0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
181b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
181c0 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eek P1 P2 * * *.
181d0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
181e0 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72  pen table cursor
181f0 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77   and P2 is a row
18200 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72  id integer.  Arr
18210 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74  ange.** for P1 t
18220 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69  o move so that i
18230 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
18240 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50  rowid given by P
18250 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  2..**.** This is
18260 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65   actually a defe
18270 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
18280 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
18290 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
182a0 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
182b0 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
182c0 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
182d0 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
182e0 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
182f0 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
18300 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a  */.case OP_Seek:
18310 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a   {    /* in2 */.
18320 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
18330 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
18340 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
18350 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
18360 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
18370 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
18380 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
18390 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
183a0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
183b0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
183c0 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
183d0 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 6d  w = 0;.    pC->m
183e0 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
183f0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
18400 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d  e(pIn2);.    pC-
18410 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
18420 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
18430 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
18440 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20   }.  break;.}.  
18450 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
18460 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
18470 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
18480 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
18490 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
184a0 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73  keRecord.  P1 is
184b0 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   an index..** If
184c0 20 61 6e 20 65 6e 74 72 79 20 74 68 61 74 20 6d   an entry that m
184d0 61 74 63 68 65 73 20 74 68 65 20 76 61 6c 75 65  atches the value
184e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 33 20   in register p3 
184f0 65 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 65  exists in P1 the
18500 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  n.** jump to P2.
18510 20 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75    If the P3 valu
18520 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  e does not match
18530 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
18540 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  .** then fall th
18550 72 75 2e 20 20 54 68 65 20 50 31 20 63 75 72 73  ru.  The P1 curs
18560 6f 72 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  or is left point
18570 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
18580 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20  ing entry.** if 
18590 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a  it exists..**.**
185a0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
185b0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  n is used to imp
185c0 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e 20 6f 70  lement the IN op
185d0 65 72 61 74 6f 72 20 77 68 65 72 65 20 74 68 65  erator where the
185e0 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64 20 73 69  .** left-hand si
185f0 64 65 20 69 73 20 61 20 53 45 4c 45 43 54 20 73  de is a SELECT s
18600 74 61 74 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61  tatement.  P1 ma
18610 79 20 62 65 20 61 20 74 72 75 65 20 69 6e 64 65  y be a true inde
18620 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20  x, or it.** may 
18630 62 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  be a temporary i
18640 6e 64 65 78 20 74 68 61 74 20 68 6f 6c 64 73 20  ndex that holds 
18650 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
18660 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61  he SELECT.** sta
18670 74 65 6d 65 6e 74 2e 20 20 20 54 68 69 73 20 69  tement.   This i
18680 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 6c  nstruction is al
18690 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  so used to imple
186a0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44 49 53 54  ment the.** DIST
186b0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20  INCT keyword in 
186c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
186d0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  s..**.** This in
186e0 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
186f0 20 69 66 20 69 6e 64 65 78 20 50 31 20 63 6f 6e   if index P1 con
18700 74 61 69 6e 73 20 61 20 72 65 63 6f 72 64 20 66  tains a record f
18710 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20 74 68 65  or which .** the
18720 20 66 69 72 73 74 20 4e 20 73 65 72 69 61 6c 69   first N seriali
18730 7a 65 64 20 76 61 6c 75 65 73 20 65 78 61 63 74  zed values exact
18740 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4e 20 73  ly match the N s
18750 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73  erialized values
18760 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 6f 72  .** in the recor
18770 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
18780 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65  , where N is the
18790 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
187a0 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68   values in.** th
187b0 65 20 50 33 20 72 65 63 6f 72 64 20 28 74 68 65  e P3 record (the
187c0 20 50 33 20 72 65 63 6f 72 64 20 69 73 20 61 20   P3 record is a 
187d0 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 50 31  prefix of the P1
187e0 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a   record). .**.**
187f0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
18800 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e  und, IsUnique, N
18810 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f  otExists.*/./* O
18820 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
18830 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
18840 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68  ** Register P3 h
18850 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
18860 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
18870 65 63 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a  ecord.  P1 is.**
18880 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 6e   an index.  If n
18890 6f 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 69  o entry exists i
188a0 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63 68 65  n P1 that matche
188b0 73 20 74 68 65 20 62 6c 6f 62 20 74 68 65 6e 20  s the blob then 
188c0 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20  jump.** to P2.  
188d0 49 66 20 61 6e 20 65 6e 74 72 79 20 64 6f 65 73  If an entry does
188e0 20 65 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20   existing, fall 
188f0 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75  through.  The cu
18900 72 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20  rsor is left.** 
18910 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
18920 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63 68  entry that match
18930 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  es..**.** See al
18940 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
18950 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ists, IsUnique.*
18960 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
18970 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
18980 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
18990 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
189a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
189b0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
189c0 3e 70 31 3b 0a 20 20 69 6e 74 20 61 6c 72 65 61  >p1;.  int alrea
189d0 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  dyExists = 0;.  
189e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
189f0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
18a00 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
18a10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
18a20 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
18a30 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
18a40 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21  sr[i])->pCursor!
18a50 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
18a60 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  s;.    UnpackedR
18a70 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
18a80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
18a90 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
18aa0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
18ab0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
18ac0 62 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79  b );.    pIdxKey
18ad0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
18ae0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
18af0 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
18b00 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20  , pIn3->z,.     
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
18b40 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20  f(aTempRec));.  
18b50 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
18b60 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
18b70 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
18b80 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
18b90 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
18ba0 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
18bb0 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50  gs |= UNPACKED_P
18bc0 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
18bd0 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
18be0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
18bf0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
18c00 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
18c10 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71  0, &res);.    sq
18c20 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
18c30 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
18c40 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20  dxKey);.    if( 
18c50 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18c60 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
18c70 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45    }.    alreadyE
18c80 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
18c90 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
18ca0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
18cb0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
18cc0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
18cd0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
18ce0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
18cf0 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
18d00 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
18d10 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
18d20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
18d30 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
18d40 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
18d50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55  ../* Opcode: IsU
18d70 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50  nique P1 P2 P3 P
18d80 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  4 *.**.** The P3
18d90 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
18da0 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ns an integer re
18db0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 43 61  cord number.  Ca
18dc0 6c 6c 20 74 68 69 73 0a 2a 2a 20 72 65 63 6f 72  ll this.** recor
18dd0 64 20 6e 75 6d 62 65 72 20 52 2e 20 20 54 68 65  d number R.  The
18de0 20 50 34 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P4 register con
18df0 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 6b  tains an index k
18e00 65 79 20 63 72 65 61 74 65 64 0a 2a 2a 20 75 73  ey created.** us
18e10 69 6e 67 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20  ing MakeRecord. 
18e20 20 43 61 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a   Call it K..**.*
18e30 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78  * P1 is an index
18e40 2e 20 20 53 6f 20 69 74 20 68 61 73 20 6e 6f 20  .  So it has no 
18e50 64 61 74 61 20 61 6e 64 20 69 74 73 20 6b 65 79  data and its key
18e60 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 0a 2a   consists of a.*
18e70 2a 20 72 65 63 6f 72 64 20 67 65 6e 65 72 61 74  * record generat
18e80 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63  ed by OP_MakeRec
18e90 6f 72 64 20 77 68 65 72 65 20 74 68 65 20 6c 61  ord where the la
18ea0 73 74 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  st field is the 
18eb0 0a 2a 2a 20 72 6f 77 69 64 20 6f 66 20 74 68 65  .** rowid of the
18ec0 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20   entry that the 
18ed0 69 6e 64 65 78 20 72 65 66 65 72 73 20 74 6f 2e  index refers to.
18ee0 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 69 6e 73  .** .** This ins
18ef0 74 72 75 63 74 69 6f 6e 20 61 73 6b 73 20 69 66  truction asks if
18f00 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 6e 74   there is an ent
18f10 72 79 20 69 6e 20 50 31 20 77 68 65 72 65 20 74  ry in P1 where t
18f20 68 65 0a 2a 2a 20 66 69 65 6c 64 73 20 6d 61 74  he.** fields mat
18f30 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20 72  ches K but the r
18f40 6f 77 69 64 20 69 73 20 64 69 66 66 65 72 65 6e  owid is differen
18f50 74 20 66 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20  t from R..** If 
18f60 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
18f70 20 65 6e 74 72 79 2c 20 74 68 65 6e 20 74 68 65   entry, then the
18f80 72 65 20 69 73 20 61 6e 20 69 6d 6d 65 64 69 61  re is an immedia
18f90 74 65 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  te.** jump to P2
18fa0 2e 20 20 49 66 20 61 6e 79 20 65 6e 74 72 79 20  .  If any entry 
18fb0 64 6f 65 73 20 65 78 69 73 74 20 77 68 65 72 65  does exist where
18fc0 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e   the index strin
18fd0 67 0a 2a 2a 20 6d 61 74 63 68 65 73 20 4b 20 62  g.** matches K b
18fe0 75 74 20 74 68 65 20 72 65 63 6f 72 64 20 6e 75  ut the record nu
18ff0 6d 62 65 72 20 69 73 20 6e 6f 74 20 52 2c 20 74  mber is not R, t
19000 68 65 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 2a  hen the record.*
19010 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
19020 74 20 65 6e 74 72 79 20 69 73 20 77 72 69 74 74  t entry is writt
19030 65 6e 20 69 6e 74 6f 20 50 33 20 61 6e 64 20 63  en into P3 and c
19040 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20  ontrol.** falls 
19050 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
19060 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
19070 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
19080 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
19090 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
190a0 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
190b0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
190c0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
190d0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
190e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
190f0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
19100 72 3b 0a 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20  r;.  Mem *pK;.  
19110 69 36 34 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70  i64 R;..  /* Pop
19120 20 74 68 65 20 76 61 6c 75 65 20 52 20 6f 66 66   the value R off
19130 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
19140 73 74 61 63 6b 0a 20 20 2a 2f 0a 20 20 61 73 73  stack.  */.  ass
19150 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
19160 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
19180 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69  i>0 && pOp->p4.i
19190 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
191a0 4b 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  K = &p->aMem[pOp
191b0 2d 3e 70 34 2e 69 5d 3b 0a 20 20 73 71 6c 69 74  ->p4.i];.  sqlit
191c0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
191d0 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 52 20 3d  ify(pIn3);.  R =
191e0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61 73   pIn3->u.i;.  as
191f0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
19200 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
19210 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  pCx = p->apCsr[i
19220 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  ];.  assert( pCx
19230 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
19240 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20   pCx->pCursor;. 
19250 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
19260 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  .    int res;.  
19270 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20    i64 v;        
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19290 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
192a0 72 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 4b  r that matches K
192b0 20 2a 2f 0a 20 20 20 20 55 6e 70 61 63 6b 65 64   */.    Unpacked
192c0 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
192d0 20 20 20 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76     /* Unpacked v
192e0 65 72 73 69 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a  ersion of P4 */.
192f0 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
19300 65 20 4b 20 69 73 20 61 20 73 74 72 69 6e 67 20  e K is a string 
19310 61 6e 64 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f  and make zKey po
19320 69 6e 74 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a  int to K.    */.
19330 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 2d 3e      assert( pK->
19340 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
19350 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20   );.    pIdxKey 
19360 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
19370 6f 72 64 55 6e 70 61 63 6b 28 70 43 78 2d 3e 70  ordUnpack(pCx->p
19380 4b 65 79 49 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20  KeyInfo, pK->n, 
19390 70 4b 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20  pK->z,.         
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
193c0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
193d0 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69 66  empRec));.    if
193e0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a  ( pIdxKey==0 ){.
193f0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
19400 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64  m;.    }.    pId
19410 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55  xKey->flags |= U
19420 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
19430 4f 57 49 44 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  OWID;..    /* Se
19440 61 72 63 68 20 66 6f 72 20 61 6e 20 65 6e 74 72  arch for an entr
19450 79 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c  y in P1 where al
19460 6c 20 62 75 74 20 74 68 65 20 6c 61 73 74 20 72  l but the last r
19470 6f 77 69 64 20 6d 61 74 63 68 20 4b 0a 20 20 20  owid match K.   
19480 20 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   ** If there is 
19490 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 6a  no such entry, j
194a0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
194b0 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20  to P2..    */.  
194c0 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64    assert( pCx->d
194d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
194e0 20 29 3b 0a 20 20 20 20 70 43 78 2d 3e 63 61 63   );.    pCx->cac
194f0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
19500 5f 53 54 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d  _STALE;.    rc =
19510 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
19520 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
19530 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
19540 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
19550 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19560 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
19570 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65  dbeDeleteUnpacke
19580 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29  dRecord(pIdxKey)
19590 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
195a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
195b0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
195c0 65 73 3c 30 20 29 7b 0a 20 20 20 20 20 20 72 63  es<0 ){.      rc
195d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
195e0 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
195f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  ;.      if( res 
19600 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  ){.        pc = 
19610 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
19620 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
19630 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
19640 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
19650 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
19660 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
19670 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19680 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43  IdxKeyCompare(pC
19690 78 2c 20 70 49 64 78 4b 65 79 2c 20 26 72 65 73  x, pIdxKey, &res
196a0 29 3b 20 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ); .    sqlite3V
196b0 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65  dbeDeleteUnpacke
196c0 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29  dRecord(pIdxKey)
196d0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
196e0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
196f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19700 72 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30  r;.    if( res>0
19710 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
19720 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
19730 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
19740 20 20 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70      /* At this p
19750 6f 69 6e 74 2c 20 70 43 72 73 72 20 69 73 20 70  oint, pCrsr is p
19760 6f 69 6e 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e  ointing to an en
19770 74 72 79 20 69 6e 20 50 31 20 77 68 65 72 65 20  try in P1 where 
19780 61 6c 6c 20 62 75 74 0a 20 20 20 20 2a 2a 20 74  all but.    ** t
19790 68 65 20 66 69 6e 61 6c 20 65 6e 74 72 79 20 28  he final entry (
197a0 74 68 65 20 72 6f 77 69 64 29 20 6d 61 74 63 68  the rowid) match
197b0 65 73 20 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20  es K.  Check to 
197c0 73 65 65 20 69 66 20 74 68 65 0a 20 20 20 20 2a  see if the.    *
197d0 2a 20 66 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f  * final rowid co
197e0 6c 75 6d 6e 20 69 73 20 64 69 66 66 65 72 65 6e  lumn is differen
197f0 74 20 66 72 6f 6d 20 52 2e 20 20 49 66 20 69 74  t from R.  If it
19800 20 65 71 75 61 6c 73 20 52 20 74 68 65 6e 20 6a   equals R then j
19810 75 6d 70 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64  ump.    ** immed
19820 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20  iately to P2..  
19830 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71    */.    rc = sq
19840 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
19850 64 28 70 43 72 73 72 2c 20 26 76 29 3b 0a 20 20  d(pCrsr, &v);.  
19860 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19870 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
19880 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19890 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
198a0 69 66 28 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20  if( v==R ){.    
198b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
198c0 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   1;.      break;
198d0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54  .    }..    /* T
198e0 68 65 20 66 69 6e 61 6c 20 76 61 72 69 6e 74 20  he final varint 
198f0 6f 66 20 74 68 65 20 6b 65 79 20 69 73 20 64 69  of the key is di
19900 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20  fferent from R. 
19910 20 53 74 6f 72 65 20 69 74 20 62 61 63 6b 0a 20   Store it back. 
19920 20 20 20 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73     ** into regis
19930 74 65 72 20 52 33 2e 20 20 28 54 68 65 20 72 65  ter R3.  (The re
19940 63 6f 72 64 20 6e 75 6d 62 65 72 20 6f 66 20 61  cord number of a
19950 6e 20 65 6e 74 72 79 20 74 68 61 74 20 76 69 6f  n entry that vio
19960 6c 61 74 65 73 0a 20 20 20 20 2a 2a 20 61 20 55  lates.    ** a U
19970 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
19980 2e 29 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 49  .).    */.    pI
19990 6e 33 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  n3->u.i = v;.   
199a0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
199b0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
199c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
199d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
199e0 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
199f0 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20  *.**.** Use the 
19a00 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19a10 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74 65  ter P3 as a inte
19a20 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72  ger key.  If a r
19a30 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74  ecord .** with t
19a40 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  hat key does not
19a50 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20   exist in table 
19a60 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70  of P1, then jump
19a70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74   to P2. .** If t
19a80 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65  he record does e
19a90 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20  xist, then fall 
19aa0 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f  thru.  The curso
19ab0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
19ac0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
19ad0 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
19ae0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
19af0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
19b00 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
19b10 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
19b20 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
19b30 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
19b40 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
19b50 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
19b60 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
19b70 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
19b80 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
19b90 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
19ba0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
19bb0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
19bc0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
19bd0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
19be0 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
19bf0 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
19c00 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
19c10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
19c20 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
19c30 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
19c40 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
19c50 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73 65 72   *pCrsr;.  asser
19c60 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
19c70 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
19c80 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d  ert( p->apCsr[i]
19c90 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
19ca0 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61  rsr = (pC = p->a
19cb0 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f  pCsr[i])->pCurso
19cc0 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  r)!=0 ){.    int
19cd0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 75 36   res = 0;.    u6
19ce0 34 20 69 4b 65 79 3b 0a 20 20 20 20 61 73 73 65  4 iKey;.    asse
19cf0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
19d00 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
19d10 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
19d20 72 5b 69 5d 2d 3e 69 73 54 61 62 6c 65 20 29 3b  r[i]->isTable );
19d30 0a 20 20 20 20 69 4b 65 79 20 3d 20 69 6e 74 54  .    iKey = intT
19d40 6f 4b 65 79 28 70 49 6e 33 2d 3e 75 2e 69 29 3b  oKey(pIn3->u.i);
19d50 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
19d60 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
19d70 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
19d80 4b 65 79 2c 20 30 2c 26 72 65 73 29 3b 0a 20 20  Key, 0,&res);.  
19d90 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
19da0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn3->u.i;.   
19db0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
19dc0 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b  d = res==0 ?1:0;
19dd0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
19de0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
19df0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
19e00 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 69 66 28  E_STALE;.    if(
19e10 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20   res!=0 ){.     
19e20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
19e30 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
19e40 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
19e50 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  d==0 );.    }.  
19e60 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70  }else if( !pC->p
19e70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
19e80 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
19e90 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70  s when an attemp
19ea0 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64  t to open a read
19eb0 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a   cursor on the .
19ec0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61      ** sqlite_ma
19ed0 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75 72  ster table retur
19ee0 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
19ef0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
19f00 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
19f10 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  );.    pc = pOp-
19f20 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
19f30 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
19f40 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a  Valid==0 );.  }.
19f50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19f60 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
19f70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
19f80 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
19f90 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
19fa0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
19fb0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
19fc0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
19fd0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
19fe0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
19ff0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1a000 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1a010 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1a020 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1a030 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1a040 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1a050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1a060 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1a070 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1a080 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  1;.  assert( i>=
1a090 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1a0a0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1a0b0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1a0c0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1a0d0 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43  ->apCsr[i]->seqC
1a0e0 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74  ount++;.  MemSet
1a0f0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1a100 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
1a110 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
1a120 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
1a130 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74  P3 * *.**.** Get
1a140 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
1a150 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
1a160 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
1a170 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
1a180 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
1a190 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
1a1a0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1a1b0 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
1a1c0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
1a1d0 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
1a1e0 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
1a1f0 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
1a200 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
1a210 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
1a220 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1a230 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
1a240 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
1a250 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
1a260 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
1a270 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  sly.** generated
1a280 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1a290 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
1a2a0 75 6d 62 65 72 73 20 61 72 65 20 61 6c 6c 6f 77  umbers are allow
1a2b0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a  ed to be less.**
1a2c0 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
1a2d0 2e 20 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  .  When this val
1a2e0 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
1a2f0 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45  aximum, a SQLITE
1a300 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69  _FULL.** error i
1a310 73 20 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68  s generated.  Th
1a320 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
1a330 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
1a340 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72  e generated.** r
1a350 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 54  ecord number.  T
1a360 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
1a370 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
1a380 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
1a390 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
1a3a0 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
1a3b0 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
1a3c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1a3d0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1a3e0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1a3f0 31 3b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a  1;.  i64 v = 0;.
1a400 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a410 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
1a420 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1a430 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1a440 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
1a450 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61    if( (pC = p->a
1a460 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f  pCsr[i])->pCurso
1a470 72 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54  r==0 ){.    /* T
1a480 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69  he zero initiali
1a490 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20  zation above is 
1a4a0 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64  all that is need
1a4b0 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  ed */.  }else{. 
1a4c0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72     /* The next r
1a4d0 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e  owid or record n
1a4e0 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74  umber (different
1a4f0 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73   terms for the s
1a500 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67  ame.    ** thing
1a510 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e  ) is obtained in
1a520 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f   a two-step algo
1a530 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
1a540 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74    ** First we at
1a550 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
1a560 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
1a570 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64  ng rowid and add
1a580 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74   one.    ** to t
1a590 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  hat.  But if the
1a5a0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1a5b0 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61  g rowid is alrea
1a5c0 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20  dy the maximum. 
1a5d0 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69     ** positive i
1a5e0 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20  nteger, we have 
1a5f0 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  to fall through 
1a600 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20  to the second.  
1a610 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74    ** probabilist
1a620 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20  ic algorithm.   
1a630 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73   **.    ** The s
1a640 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20  econd algorithm 
1a650 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72  is to select a r
1a660 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  owid at random a
1a670 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  nd see if.    **
1a680 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
1a690 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ts in the table.
1a6a0 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
1a6b0 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a   exist, we have.
1a6c0 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64      ** succeeded
1a6d0 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d  .  If the random
1a6e0 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73   rowid does exis
1a6f0 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e  t, we select a n
1a700 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e  ew one.    ** an
1a710 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20  d try again, up 
1a720 74 6f 20 31 30 30 30 20 74 69 6d 65 73 2e 0a 20  to 1000 times.. 
1a730 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72     **.    ** For
1a740 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 6c 65   a table with le
1a750 73 73 20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f  ss than 2 billio
1a760 6e 20 65 6e 74 72 69 65 73 2c 20 74 68 65 20 70  n entries, the p
1a770 72 6f 62 61 62 69 6c 69 74 79 0a 20 20 20 20 2a  robability.    *
1a780 2a 20 6f 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67  * of not finding
1a790 20 61 20 75 6e 75 73 65 64 20 72 6f 77 69 64 20   a unused rowid 
1a7a0 69 73 20 61 62 6f 75 74 20 31 2e 30 65 2d 33 30  is about 1.0e-30
1a7b0 30 2e 20 20 54 68 69 73 20 69 73 20 61 20 0a 20  0.  This is a . 
1a7c0 20 20 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70     ** non-zero p
1a7d0 72 6f 62 61 62 69 6c 69 74 79 2c 20 62 75 74 20  robability, but 
1a7e0 69 74 20 69 73 20 73 74 69 6c 6c 20 76 61 6e 69  it is still vani
1a7f0 73 68 69 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e  shingly small an
1a800 64 20 73 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20  d should.    ** 
1a810 6e 65 76 65 72 20 63 61 75 73 65 20 61 20 70 72  never cause a pr
1a820 6f 62 6c 65 6d 2e 20 20 59 6f 75 20 61 72 65 20  oblem.  You are 
1a830 6d 75 63 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20  much, much more 
1a840 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 61  likely to have a
1a850 0a 20 20 20 20 2a 2a 20 68 61 72 64 77 61 72 65  .    ** hardware
1a860 20 66 61 69 6c 75 72 65 20 74 68 61 6e 20 66 6f   failure than fo
1a870 72 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d  r this algorithm
1a880 20 74 6f 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a   to fail..    **
1a890 0a 20 20 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c  .    ** The anal
1a8a0 79 73 69 73 20 69 6e 20 74 68 65 20 70 72 65 76  ysis in the prev
1a8b0 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 61  ious paragraph a
1a8c0 73 73 75 6d 65 73 20 74 68 61 74 20 79 6f 75 20  ssumes that you 
1a8d0 68 61 76 65 20 61 20 67 6f 6f 64 0a 20 20 20 20  have a good.    
1a8e0 2a 2a 20 73 6f 75 72 63 65 20 6f 66 20 72 61 6e  ** source of ran
1a8f0 64 6f 6d 20 6e 75 6d 62 65 72 73 2e 20 20 49 73  dom numbers.  Is
1a900 20 61 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74   a library funct
1a910 69 6f 6e 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38  ion like lrand48
1a920 28 29 0a 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65  ().    ** good e
1a930 6e 6f 75 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d  nough?  Maybe. M
1a940 61 79 62 65 20 6e 6f 74 2e 20 49 74 27 73 20 68  aybe not. It's h
1a950 61 72 64 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74  ard to know whet
1a960 68 65 72 20 74 68 65 72 65 0a 20 20 20 20 2a 2a  her there.    **
1a970 20 6d 69 67 68 74 20 62 65 20 73 75 62 74 6c 65   might be subtle
1a980 20 62 75 67 73 20 69 73 20 73 6f 6d 65 20 69 6d   bugs is some im
1a990 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66  plementations of
1a9a0 20 6c 72 61 6e 64 34 38 28 29 20 74 68 61 74 0a   lrand48() that.
1a9b0 20 20 20 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75      ** could cau
1a9c0 73 65 20 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20  se problems. To 
1a9d0 61 76 6f 69 64 20 75 6e 63 65 72 74 61 69 6e 74  avoid uncertaint
1a9e0 79 2c 20 53 51 4c 69 74 65 20 75 73 65 73 20 69  y, SQLite uses i
1a9f0 74 73 20 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72  ts own .    ** r
1aa00 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e  andom number gen
1aa10 65 72 61 74 6f 72 20 62 61 73 65 64 20 6f 6e 20  erator based on 
1aa20 74 68 65 20 52 43 34 20 61 6c 67 6f 72 69 74 68  the RC4 algorith
1aa30 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
1aa40 20 54 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61   To promote loca
1aa50 6c 69 74 79 20 6f 66 20 72 65 66 65 72 65 6e 63  lity of referenc
1aa60 65 20 66 6f 72 20 72 65 70 65 74 69 74 69 76 65  e for repetitive
1aa70 20 69 6e 73 65 72 74 73 2c 20 74 68 65 0a 20 20   inserts, the.  
1aa80 20 20 2a 2a 20 66 69 72 73 74 20 66 65 77 20 61    ** first few a
1aa90 74 74 65 6d 70 74 73 20 61 74 20 63 68 6f 6f 73  ttempts at choos
1aaa0 69 6e 67 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77  ing a random row
1aab0 69 64 20 70 69 63 6b 20 76 61 6c 75 65 73 20 6a  id pick values j
1aac0 75 73 74 20 61 20 6c 69 74 74 6c 65 0a 20 20 20  ust a little.   
1aad0 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
1aae0 74 68 65 20 70 72 65 76 69 6f 75 73 20 72 6f 77  the previous row
1aaf0 69 64 2e 20 20 54 68 69 73 20 68 61 73 20 62 65  id.  This has be
1ab00 65 6e 20 73 68 6f 77 6e 20 65 78 70 65 72 69 6d  en shown experim
1ab10 65 6e 74 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74  entally.    ** t
1ab20 6f 20 64 6f 75 62 6c 65 20 74 68 65 20 73 70 65  o double the spe
1ab30 65 64 20 6f 66 20 74 68 65 20 43 4f 50 59 20 6f  ed of the COPY o
1ab40 70 65 72 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  peration..    */
1ab50 0a 20 20 20 20 69 6e 74 20 72 65 73 2c 20 72 78  .    int res, rx
1ab60 3d 53 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b  =SQLITE_OK, cnt;
1ab70 0a 20 20 20 20 69 36 34 20 78 3b 0a 20 20 20 20  .    i64 x;.    
1ab80 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  cnt = 0;.    if(
1ab90 20 28 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c   (sqlite3BtreeFl
1aba0 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ags(pC->pCursor)
1abb0 26 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42  &(BTREE_INTKEY|B
1abc0 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20  TREE_ZERODATA)) 
1abd0 21 3d 0a 20 20 20 20 20 20 20 20 20 20 42 54 52  !=.          BTR
1abe0 45 45 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20  EE_INTKEY ){.   
1abf0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
1ac00 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
1ac10 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ac20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ac30 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73  }.    assert( (s
1ac40 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1ac50 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20  (pC->pCursor) & 
1ac60 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30  BTREE_INTKEY)!=0
1ac70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1ac80 28 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61  (sqlite3BtreeFla
1ac90 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  gs(pC->pCursor) 
1aca0 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  & BTREE_ZERODATA
1acb0 29 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  )==0 );..#ifdef 
1acc0 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
1acd0 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
1ace0 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
1acf0 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
1ad00 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
1ad10 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
1ad20 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
1ad30 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
1ad40 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
1ad50 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
1ad60 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
1ad70 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
1ad80 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1ad90 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
1ada0 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
1adb0 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
1adc0 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
1add0 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
1ade0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1adf0 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
1ae00 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
1ae10 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
1ae20 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
1ae30 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
1ae40 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1ae50 20 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 65 78       if( pC->nex
1ae60 74 52 6f 77 69 64 56 61 6c 69 64 20 29 7b 0a 20  tRowidValid ){. 
1ae70 20 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6e         v = pC->n
1ae80 65 78 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  extRowid;.      
1ae90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
1aea0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1aeb0 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
1aec0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1aed0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1aee0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
1aef0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1af00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1af10 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
1af20 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
1af30 76 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  v = 1;.        }
1af40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1af50 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1af60 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1af70 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1af80 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b  v = keyToInt(v);
1af90 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
1afa0 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  ==MAX_ROWID ){. 
1afb0 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75             pC->u
1afc0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
1afd0 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  1;.          }el
1afe0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
1aff0 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  v++;.          }
1b000 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1b010 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1b020 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
1b030 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
1b040 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1b050 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20     Mem *pMem;.  
1b060 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1b070 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
1b080 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f  p3<=p->nMem ); /
1b090 2a 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  * P3 is a valid 
1b0a0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20  memory cell */. 
1b0b0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
1b0c0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
1b0d0 0a 09 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ..REGISTER_TRACE
1b0e0 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
1b0f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1b100 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1b110 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  y(pMem);.       
1b120 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
1b130 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1b140 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
1b150 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
1b160 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ger */.        i
1b170 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
1b180 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
1b190 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1b1a0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1b1b0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1b1c0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1b1d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b1e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b1f0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
1b200 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
1b210 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
1b220 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
1b230 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
1b240 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
1b250 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 76  dif..      if( v
1b260 3c 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  <MAX_ROWID ){.  
1b270 20 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f        pC->nextRo
1b280 77 69 64 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  widValid = 1;.  
1b290 20 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f        pC->nextRo
1b2a0 77 69 64 20 3d 20 76 2b 31 3b 0a 20 20 20 20 20  wid = v+1;.     
1b2b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1b2c0 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1b2d0 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  id = 0;.      }.
1b2e0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1b2f0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1b300 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1b310 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
1b320 20 2f 2a 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   /* SQLITE_FULL 
1b330 6d 75 73 74 20 68 61 76 65 20 6f 63 63 75 72 72  must have occurr
1b340 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
1b350 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62   */.      v = db
1b360 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b  ->priorNewRowid;
1b370 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
1b380 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
1b390 20 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20    if( cnt==0 && 
1b3a0 28 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20  (v&0xffffff)==v 
1b3b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  ){.          v++
1b3c0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1b3d0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1b3e0 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
1b3f0 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
1b400 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c          if( cnt<
1b410 35 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66  5 ) v &= 0xfffff
1b420 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
1b430 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 20       if( v==0 ) 
1b440 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
1b450 20 20 78 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76    x = intToKey(v
1b460 29 3b 0a 20 20 20 20 20 20 20 20 72 78 20 3d 20  );.        rx = 
1b470 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1b480 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1b490 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1b4a0 78 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  x, 0, &res);.   
1b4b0 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
1b4c0 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30    }while( cnt<10
1b4d0 30 20 26 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f  0 && rx==SQLITE_
1b4e0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a  OK && res==0 );.
1b4f0 20 20 20 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e        db->priorN
1b500 65 77 52 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20  ewRowid = v;.   
1b510 20 20 20 69 66 28 20 72 78 3d 3d 53 51 4c 49 54     if( rx==SQLIT
1b520 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1b530 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1b540 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20  QLITE_FULL;.    
1b550 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b560 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b570 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
1b580 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b590 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1b5a0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1b5b0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1b5c0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1b5d0 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  LE;.  }.  MemSet
1b5e0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1b5f0 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d  EM_Int);.  pOut-
1b600 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
1b610 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b620 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
1b630 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69   P4 P5.**.** Wri
1b640 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
1b650 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
1b660 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
1b670 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
1b680 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
1b690 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
1b6a0 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
1b6b0 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
1b6c0 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
1b6d0 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
1b6e0 73 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  s the value stor
1b6f0 65 64 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  ed register.** n
1b700 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
1b710 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
1b720 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
1b730 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
1b740 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
1b750 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1b760 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1b770 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
1b780 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1b790 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1b7a0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1b7b0 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
1b7c0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1b7d0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1b7e0 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
1b7f0 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
1b800 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
1b810 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
1b820 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
1b830 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
1b840 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
1b850 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
1b860 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
1b870 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
1b880 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
1b890 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
1b8a0 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
1b8b0 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
1b8c0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
1b8d0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
1b8e0 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
1b8f0 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
1b900 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
1b910 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
1b920 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
1b930 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
1b940 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
1b950 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
1b960 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
1b970 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
1b980 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
1b990 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
1b9a0 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
1b9b0 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
1b9c0 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
1b9d0 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
1b9e0 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
1b9f0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
1ba00 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
1ba10 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
1ba20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
1ba30 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
1ba40 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
1ba50 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1ba60 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
1ba70 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
1ba80 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
1ba90 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
1baa0 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
1bab0 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  xInsert..*/.case
1bac0 20 4f 50 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20   OP_Insert: {.  
1bad0 4d 65 6d 20 2a 70 44 61 74 61 20 3d 20 26 70 2d  Mem *pData = &p-
1bae0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1baf0 20 20 4d 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70    Mem *pKey = &p
1bb00 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
1bb10 0a 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ..  i64 iKey;   
1bb20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
1bb30 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
1bb40 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
1bb50 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 69   inserted */.  i
1bb60 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1bb70 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1bb80 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
1bb90 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1bba0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1bbb0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1bbc0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1bbd0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1bbe0 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64  !=0 || pC->pseud
1bbf0 6f 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  oTable );.  asse
1bc00 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20  rt( pKey->flags 
1bc10 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
1bc20 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1bc30 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
1bc40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
1bc50 70 44 61 74 61 29 3b 0a 20 20 52 45 47 49 53 54  pData);.  REGIST
1bc60 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1bc70 2c 20 70 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79  , pKey);..  iKey
1bc80 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79   = intToKey(pKey
1bc90 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
1bca0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
1bcb0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1bcc0 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
1bcd0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
1bce0 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
1bcf0 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e  stRowid = pKey->
1bd00 75 2e 69 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  u.i;.  if( pC->n
1bd10 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20 26 26  extRowidValid &&
1bd20 20 70 4b 65 79 2d 3e 75 2e 69 3e 3d 70 43 2d 3e   pKey->u.i>=pC->
1bd30 6e 65 78 74 52 6f 77 69 64 20 29 7b 0a 20 20 20  nextRowid ){.   
1bd40 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61   pC->nextRowidVa
1bd50 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lid = 0;.  }.  i
1bd60 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1bd70 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1bd80 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
1bd90 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
1bda0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
1bdb0 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
1bdc0 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
1bdd0 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
1bde0 20 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f    if( pC->pseudo
1bdf0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69 66 28  Table ){.    if(
1be00 20 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64   !pC->ephemPseud
1be10 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  oTable ){.      
1be20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1be30 2c 20 70 43 2d 3e 70 44 61 74 61 29 3b 0a 20 20  , pC->pData);.  
1be40 20 20 7d 0a 20 20 20 20 70 43 2d 3e 69 4b 65 79    }.    pC->iKey
1be50 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 70 43 2d   = iKey;.    pC-
1be60 3e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  >nData = pData->
1be70 6e 3b 0a 20 20 20 20 69 66 28 20 70 44 61 74 61  n;.    if( pData
1be80 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a 4d 61 6c  ->z==pData->zMal
1be90 6c 6f 63 20 7c 7c 20 70 43 2d 3e 65 70 68 65 6d  loc || pC->ephem
1bea0 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1beb0 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d       pC->pData =
1bec0 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 20   pData->z;.     
1bed0 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d 50   if( !pC->ephemP
1bee0 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1bef0 20 20 20 20 20 20 70 44 61 74 61 2d 3e 66 6c 61        pData->fla
1bf00 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
1bf10 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 66          pData->f
1bf20 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65  lags |= MEM_Ephe
1bf30 6d 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61  m;.        pData
1bf40 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
1bf50 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1bf60 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74  {.      pC->pDat
1bf70 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  a = sqlite3Mallo
1bf80 63 28 20 70 43 2d 3e 6e 44 61 74 61 2b 32 20 29  c( pC->nData+2 )
1bf90 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 43 2d  ;.      if( !pC-
1bfa0 3e 70 44 61 74 61 20 29 20 67 6f 74 6f 20 6e 6f  >pData ) goto no
1bfb0 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 6d 65 6d 63  _mem;.      memc
1bfc0 70 79 28 70 43 2d 3e 70 44 61 74 61 2c 20 70 44  py(pC->pData, pD
1bfd0 61 74 61 2d 3e 7a 2c 20 70 43 2d 3e 6e 44 61 74  ata->z, pC->nDat
1bfe0 61 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44  a);.      pC->pD
1bff0 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 5d 20 3d  ata[pC->nData] =
1c000 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44   0;.      pC->pD
1c010 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 2b 31 5d  ata[pC->nData+1]
1c020 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1c030 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1c040 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e  .  }else{.    in
1c050 74 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 69 66 28  t nZero;.    if(
1c060 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1c070 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
1c080 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
1c090 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65  >u.nZero;.    }e
1c0a0 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  lse{.      nZero
1c0b0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1c0c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c0d0 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72  eInsert(pC->pCur
1c0e0 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20  sor, 0, iKey,.  
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
1c110 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
1c120 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1c150 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a 20  G_APPEND);.  }. 
1c160 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56   .  pC->rowidIsV
1c170 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
1c180 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1c190 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1c1a0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1c1b0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
1c1c0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
1c1d0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
1c1e0 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
1c1f0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
1c200 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1c210 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1c220 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1c230 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
1c240 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63  Db].zName;.    c
1c250 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20  onst char *zTbl 
1c260 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
1c270 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70 2d   int op = ((pOp-
1c280 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
1c290 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
1c2a0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
1c2b0 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
1c2c0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1c2d0 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
1c2e0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1c2f0 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
1c300 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1c310 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c320 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
1c330 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c340 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
1c350 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1c360 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
1c370 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
1c380 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
1c390 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
1c3a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
1c3b0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
1c3c0 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
1c3d0 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
1c3e0 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
1c3f0 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
1c400 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
1c410 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1c420 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
1c430 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
1c440 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1c450 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
1c460 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
1c470 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
1c480 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
1c490 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
1c4a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1c4b0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
1c4c0 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
1c4d0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
1c4e0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
1c4f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
1c500 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
1c510 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
1c520 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
1c530 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
1c540 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
1c550 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
1c560 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
1c570 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1c580 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
1c590 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1c5a0 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
1c5b0 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
1c5c0 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
1c5d0 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
1c5e0 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
1c5f0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
1c600 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
1c610 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
1c620 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
1c630 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
1c640 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
1c650 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1c660 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
1c670 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1c680 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  >p1;.  i64 iKey;
1c690 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c6a0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  C;..  assert( i>
1c6b0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1c6c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1c6d0 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1c6e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c6f0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1c700 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  or!=0 );  /* Onl
1c710 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c  y valid for real
1c720 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75   tables, no pseu
1c730 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f  dotables */..  /
1c740 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d  * If the update-
1c750 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
1c760 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74  oked, set iKey t
1c770 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  o the rowid of t
1c780 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e  he.  ** row bein
1c790 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a  g deleted..  */.
1c7a0 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
1c7b0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1c7c0 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73  ->p4.z ){.    as
1c7d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1c7e0 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  e );.    assert(
1c7f0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1c800 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77  d );  /* lastRow
1c810 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69 6f  id set by previo
1c820 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a  us OP_NotFound *
1c830 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d  /.    iKey = pC-
1c840 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a  >lastRowid;.  }.
1c850 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1c860 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1c870 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1c880 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c890 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20  o_error;.  rc = 
1c8a0 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
1c8b0 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  te(pC->pCursor);
1c8c0 0a 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64  .  pC->nextRowid
1c8d0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1c8e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1c8f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
1c900 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
1c910 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
1c920 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
1c930 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1c940 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1c950 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
1c960 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
1c970 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44  ar *zDb = db->aD
1c980 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
1c990 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
1c9a0 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34   *zTbl = pOp->p4
1c9b0 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64  .z;.    db->xUpd
1c9c0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1c9d0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
1c9e0 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
1c9f0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
1ca00 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
1ca10 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
1ca20 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1ca30 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
1ca40 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
1ca50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1ca60 20 52 65 73 65 74 43 6f 75 6e 74 20 50 31 20 2a   ResetCount P1 *
1ca70 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1ca80 63 6f 64 65 20 72 65 73 65 74 73 20 74 68 65 20  code resets the 
1ca90 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
1caa0 6e 67 65 20 63 6f 75 6e 74 65 72 20 74 6f 20 30  nge counter to 0
1cab0 2e 20 49 66 20 50 31 20 69 73 20 74 72 75 65 2c  . If P1 is true,
1cac0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 76 61 6c  .** then the val
1cad0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
1cae0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
1caf0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
1cb00 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
1cb10 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
1cb20 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
1cb30 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
1cb40 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 0a  ite3_changes()).
1cb50 2a 2a 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ** before it is 
1cb60 72 65 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  reset. This is u
1cb70 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
1cb80 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
1cb90 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
1cba0 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  {.  if( pOp->p1 
1cbb0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
1cbc0 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
1cbd0 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
1cbe0 7d 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  }.  p->nChange =
1cbf0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1cc00 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
1cc10 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
1cc20 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
1cc30 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
1cc40 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74  complete row dat
1cc50 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  a for cursor P1.
1cc60 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
1cc70 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
1cc80 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
1cc90 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
1cca0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
1ccb0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
1ccc0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
1ccd0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
1cce0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
1ccf0 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
1cd00 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
1cd10 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
1cd20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
1cd30 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
1cd40 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
1cd50 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f  o-table..*/./* O
1cd60 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31  pcode: RowKey P1
1cd70 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1cd80 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
1cd90 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
1cda0 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
1cdb0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
1cdc0 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
1cdd0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
1cde0 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
1cdf0 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
1ce00 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
1ce10 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
1ce20 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
1ce30 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1ce40 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
1ce50 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
1ce60 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
1ce70 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
1ce80 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
1ce90 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1cea0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1ceb0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
1cec0 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
1ced0 77 44 61 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69  wData: {.  int i
1cee0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
1cef0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cf00 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1cf10 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75  .  u32 n;..  pOu
1cf20 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
1cf30 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  ->p2];..  /* Not
1cf40 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
1cf50 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
1cf60 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
1cf70 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
1cf80 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 69  n */.  assert( i
1cf90 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1cfa0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1cfb0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1cfc0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1cfd0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1cfe0 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20  =OP_RowKey );.  
1cff0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e  assert( pC->isIn
1d000 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  dex || pOp->opco
1d010 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
1d020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d030 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d040 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
1d050 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1d060 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b  seudoTable==0 );
1d070 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1d080 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
1d090 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1d0a0 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  or;.  rc = sqlit
1d0b0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1d0c0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1d0d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1d0e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
1d0f0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
1d100 0a 20 20 20 20 69 36 34 20 6e 36 34 3b 0a 20 20  .    i64 n64;.  
1d110 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
1d120 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 73 71  sTable );.    sq
1d130 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1d140 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
1d150 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
1d160 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
1d170 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
1d180 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
1d190 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
1d1a0 20 28 69 6e 74 29 6e 36 34 3b 0a 20 20 7d 65 6c   (int)n64;.  }el
1d1b0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42  se{.    sqlite3B
1d1c0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
1d1d0 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 69 66 28  sr, &n);.    if(
1d1e0 20 28 69 6e 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d   (int)n>db->aLim
1d1f0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
1d200 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
1d210 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
1d220 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73     }.  }.  if( s
1d230 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
1d240 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b  w(pOut, n, 0) ){
1d250 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
1d260 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
1d270 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
1d280 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1d290 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
1d2a0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
1d2b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d2c0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
1d2d0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
1d2e0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
1d2f0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
1d300 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
1d310 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
1d320 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
1d330 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
1d340 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
1d350 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
1d360 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
1d370 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
1d380 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d390 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
1d3a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
1d3b0 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
1d3c0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
1d3d0 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
1d3e0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
1d3f0 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
1d400 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
1d410 74 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  to..*/.case OP_R
1d420 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1d430 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1d440 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1d450 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1d460 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d470 43 3b 0a 20 20 69 36 34 20 76 3b 0a 0a 20 20 61  C;.  i64 v;..  a
1d480 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1d490 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d4a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1d4b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d4c0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
1d4d0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
1d4e0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
1d4f0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1d500 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d510 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  if( pC->rowidIsV
1d520 61 6c 69 64 20 29 7b 0a 20 20 20 20 76 20 3d 20  alid ){.    v = 
1d530 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1d540 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
1d550 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1d560 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 70    v = keyToInt(p
1d570 43 2d 3e 69 4b 65 79 29 3b 0a 20 20 7d 65 6c 73  C->iKey);.  }els
1d580 65 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  e if( pC->nullRo
1d590 77 20 29 7b 0a 20 20 20 20 2f 2a 20 4c 65 61 76  w ){.    /* Leav
1d5a0 65 20 74 68 65 20 72 6f 77 69 64 20 73 65 74 20  e the rowid set 
1d5b0 74 6f 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  to a NULL */.   
1d5c0 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b   break;.  }else{
1d5d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1d5e0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1d5f0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
1d600 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
1d610 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 76 20 3d  or, &v);.    v =
1d620 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20   keyToInt(v);.  
1d630 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
1d640 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  v;.  MemSetTypeF
1d650 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
1d660 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
1d670 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
1d680 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
1d690 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
1d6a0 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
1d6b0 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
1d6c0 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
1d6d0 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
1d6e0 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
1d6f0 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
1d700 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
1d710 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
1d720 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
1d730 77 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  w: {.  int i = p
1d740 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
1d750 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1d760 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1d770 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1d780 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b  C = p->apCsr[i];
1d790 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1d7a0 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
1d7b0 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77  w = 1;.  pC->row
1d7c0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1d7d0 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
1d7e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
1d7f0 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
1d800 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1d810 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d820 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
1d830 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1d840 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
1d850 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
1d860 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
1d870 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
1d880 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
1d890 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
1d8a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1d8b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
1d8c0 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
1d8d0 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
1d8e0 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
1d8f0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1d900 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
1d910 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
1d920 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1d930 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
1d940 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
1d950 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1d960 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
1d970 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
1d980 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
1d990 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1d9a0 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
1d9b0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1d9c0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1d9d0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  es;..  assert( i
1d9e0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1d9f0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1da00 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1da10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1da20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1da30 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1da40 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20  Crsr!=0 );.  rc 
1da50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1da60 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
1da70 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1da80 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
1da90 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1daa0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1dab0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1dac0 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 20 26  ALE;.  if( res &
1dad0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  & pOp->p2>0 ){. 
1dae0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1daf0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1db00 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
1db10 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
1db20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1db30 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
1db40 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
1db50 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
1db60 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
1db70 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
1db80 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
1db90 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
1dba0 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
1dbb0 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
1dbc0 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
1dbd0 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
1dbe0 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
1dbf0 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
1dc00 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
1dc10 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
1dc20 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
1dc30 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
1dc40 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
1dc50 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
1dc60 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
1dc70 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
1dc80 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
1dc90 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
1dca0 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
1dcb0 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
1dcc0 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
1dcd0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
1dce0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
1dcf0 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
1dd00 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
1dd10 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
1dd20 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
1dd30 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
1dd40 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1dd50 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
1dd60 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
1dd70 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1dd80 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
1dd90 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
1dda0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
1ddb0 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  ORT-1]++;.  /* F
1ddc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1ddd0 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
1dde0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
1ddf0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1de00 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
1de10 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
1de20 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
1de30 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
1de40 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
1de50 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
1de60 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
1de70 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
1de80 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
1de90 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
1dea0 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
1deb0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
1dec0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1ded0 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
1dee0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1def0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
1df00 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
1df10 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
1df20 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
1df30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
1df40 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1df50 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20  jump */.  int i 
1df60 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
1df70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1df80 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1df90 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
1dfa0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1dfb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1dfc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1dfd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1dfe0 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73  0 );.  if( (pCrs
1dff0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 29  r = pC->pCursor)
1e000 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
1e010 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
1e020 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
1e030 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20      pC->atFirst 
1e040 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1e050 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1e060 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1e070 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1e080 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1e090 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d  }else{.    res =
1e0a0 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   1;.  }.  pC->nu
1e0b0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
1e0c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e0d0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
1e0e0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
1e0f0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
1e100 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1e110 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e120 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
1e130 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
1e140 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
1e150 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1e160 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
1e170 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
1e180 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
1e190 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
1e1a0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
1e1b0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
1e1c0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
1e1d0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
1e1e0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
1e1f0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
1e200 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
1e210 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
1e220 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1e230 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
1e240 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
1e250 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
1e260 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
1e270 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  -table..**.** Se
1e280 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
1e290 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
1e2a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1e2b0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
1e2c0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1e2d0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
1e2e0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
1e2f0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
1e300 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
1e310 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
1e320 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
1e330 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
1e340 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
1e350 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
1e360 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
1e370 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
1e380 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
1e390 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
1e3a0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1e3b0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
1e3c0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
1e3d0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
1e3e0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1e3f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  .*/.case OP_Prev
1e400 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
1e410 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
1e420 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
1e430 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
1e440 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1e450 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
1e460 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b  nt res;..  CHECK
1e470 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
1e480 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e490 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e4a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e4b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1e4c0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1e4d0 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
1e4e0 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
1e4f0 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
1e500 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1e510 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1e520 43 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20  Crsr );.  res = 
1e530 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  1;.  assert( pC-
1e540 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1e550 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70  =0 );.  rc = pOp
1e560 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78  ->opcode==OP_Nex
1e570 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65  t ? sqlite3Btree
1e580 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73  Next(pCrsr, &res
1e590 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) :.            
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72    sqlite3BtreePr
1e5c0 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72  evious(pCrsr, &r
1e5d0 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
1e5e0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
1e5f0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1e600 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1e610 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1e620 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1e630 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  - 1;.    if( pOp
1e640 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74  ->p5 ) p->aCount
1e650 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b  er[pOp->p5-1]++;
1e660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1e670 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1e680 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1e690 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d  #endif.  }.  pC-
1e6a0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1e6b0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
1e6c0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
1e6d0 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ert P1 P2 P3 * *
1e6e0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
1e6f0 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
1e700 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
1e710 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 49  ing the.** MakeI
1e720 64 78 52 65 63 20 69 6e 73 74 72 75 63 74 69 6f  dxRec instructio
1e730 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
1e740 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
1e750 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
1e760 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
1e770 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
1e780 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
1e790 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
1e7a0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
1e7b0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
1e7c0 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
1e7d0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
1e7e0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
1e7f0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1e800 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
1e810 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
1e820 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
1e830 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
1e840 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
1e850 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
1e860 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
1e870 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
1e880 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1e890 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e8a0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1e8b0 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
1e8c0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1e8d0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1e8e0 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1e8f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
1e900 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1e910 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 28 70  Blob );.  if( (p
1e920 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e  Crsr = (pC = p->
1e930 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
1e940 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  or)!=0 ){.    as
1e950 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e960 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
1e970 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
1e980 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
1e990 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e9a0 20 20 69 6e 74 20 6e 4b 65 79 20 3d 20 70 49 6e    int nKey = pIn
1e9b0 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73  2->n;.      cons
1e9c0 74 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d 20 70  t char *zKey = p
1e9d0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
1e9e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
1e9f0 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
1ea00 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
1ea10 30 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20  0, pOp->p3);.   
1ea20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
1ea30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1ea40 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
1ea50 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1ea60 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
1ea70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1ea80 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
1ea90 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
1eaa0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
1eab0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
1eac0 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
1ead0 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
1eae0 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
1eaf0 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
1eb00 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
1eb10 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
1eb20 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
1eb30 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
1eb40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
1eb50 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  elete: {.  int i
1eb60 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
1eb70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1eb80 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1eb90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1eba0 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
1ebb0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
1ebc0 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
1ebd0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73  p->nMem );.  ass
1ebe0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1ebf0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1ec00 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1ec10 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
1ec20 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d  pCrsr = (pC = p-
1ec30 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
1ec40 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  sor)!=0 ){.    i
1ec50 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61  nt res;.    Unpa
1ec60 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1ec70 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1ec80 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1ec90 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1eca0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e  )pOp->p3;.    r.
1ecb0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72  flags = 0;.    r
1ecc0 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  .aMem = &p->aMem
1ecd0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72  [pOp->p2];.    r
1ece0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ecf0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1ed00 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
1ed10 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1ed20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1ed30 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1ed40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ed50 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
1ed60 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1ed70 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1ed80 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
1ed90 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1eda0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1edb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1edc0 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
1edd0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1ede0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
1edf0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
1ee00 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
1ee10 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
1ee20 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
1ee30 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
1ee40 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
1ee50 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
1ee60 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
1ee70 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
1ee80 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1ee90 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
1eea0 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
1eeb0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
1eec0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
1eed0 77 69 64 2c 20 4d 61 6b 65 49 64 78 52 65 63 2e  wid, MakeIdxRec.
1eee0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
1eef0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1ef00 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1ef10 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
1ef20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1ef30 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1ef40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ef50 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  C;..  assert( i>
1ef60 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1ef70 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1ef80 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
1ef90 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
1efa0 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
1efb0 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30  i])->pCursor)!=0
1efc0 20 29 7b 0a 20 20 20 20 69 36 34 20 72 6f 77 69   ){.    i64 rowi
1efd0 64 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20  d;..    assert( 
1efe0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1eff0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
1f000 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f010 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  ==0 );.    if( !
1f020 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
1f030 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1f040 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43  3VdbeIdxRowid(pC
1f050 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
1f060 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f070 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1f080 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f090 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1f0a0 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79  }.      MemSetTy
1f0b0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
1f0c0 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  _Int);.      pOu
1f0d0 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
1f0e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
1f0f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1f100 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
1f110 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20  P4 P5.**.** The 
1f120 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
1f130 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
1f140 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
1f150 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
1f160 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
1f170 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
1f180 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
1f190 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
1f1a0 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
1f1b0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1f1c0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
1f1d0 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
1f1e0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
1f1f0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
1f200 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
1f210 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1f220 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1f230 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
1f240 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
1f250 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
1f260 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1f270 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
1f280 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
1f290 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
1f2a0 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
1f2b0 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a   by an epsilon .
1f2c0 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ** prior to the 
1f2d0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
1f2e0 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64  s make the opcod
1f2f0 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47  e work like IdxG
1f300 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74  T except.** that
1f310 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d   if the key from
1f320 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1f330 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
1f340 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f  key in the curso
1f350 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  r,.** the result
1f360 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61   is false wherea
1f370 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72  s it would be tr
1f380 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a  ue with IdxGT..*
1f390 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
1f3a0 4c 54 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  LT P1 P2 P3 * P5
1f3b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
1f3c0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
1f3d0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
1f3e0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
1f3f0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
1f400 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f  hat omits the RO
1f410 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
1f420 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
1f430 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
1f440 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
1f450 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1f460 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
1f470 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  e ROWID on the P
1f480 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
1f490 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
1f4a0 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
1f4b0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
1f4c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1f4d0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
1f4e0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1f4f0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1f500 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  on..**.** If P5 
1f510 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e  is non-zero then
1f520 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69   the key value i
1f530 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61  s increased by a
1f540 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20  n epsilon prior 
1f550 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61  .** to the compa
1f560 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b  rison.  This mak
1f570 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  es the opcode wo
1f580 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a  rk like IdxLE..*
1f590 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
1f5a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
1f5b0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f5c0 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20  P_IdxGE: {      
1f5d0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f5e0 2f 0a 20 20 69 6e 74 20 69 3d 20 70 4f 70 2d 3e  /.  int i= pOp->
1f5f0 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
1f600 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1f610 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1f620 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1f630 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
1f640 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d  0 );.  if( (pC =
1f650 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
1f660 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
1f670 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
1f680 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1f690 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1f6a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1f6b0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1f6c0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1f6d0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
1f6e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1f6f0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1f700 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
1f710 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1f720 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1f730 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1f740 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
1f750 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
1f760 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1f770 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
1f780 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
1f790 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
1f7a0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1f7b0 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
1f7c0 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
1f7d0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1f7e0 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
1f7f0 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
1f800 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
1f810 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1f820 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
1f830 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
1f840 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
1f850 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1f860 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f870 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
1f880 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
1f890 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
1f8a0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f8b0 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
1f8c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f8d0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
1f8e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f8f0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
1f900 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
1f910 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1f920 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
1f930 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f940 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1f950 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
1f960 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
1f970 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
1f980 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1f990 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
1f9a0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
1f9b0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
1f9c0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
1f9d0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1f9e0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
1f9f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1fa00 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
1fa10 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
1fa20 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
1fa30 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
1fa40 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
1fa50 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
1fa60 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
1fa70 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
1fa80 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1fa90 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
1faa0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
1fab0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
1fac0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
1fad0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
1fae0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
1faf0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
1fb00 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
1fb10 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
1fb20 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
1fb30 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
1fb40 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
1fb50 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
1fb60 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
1fb70 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
1fb80 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
1fb90 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
1fba0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
1fbb0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
1fbc0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
1fbd0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1fbe0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
1fbf0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1fc00 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
1fc10 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
1fc20 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
1fc30 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1fc40 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1fc50 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
1fc60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
1fc70 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
1fc80 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1fc90 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
1fca0 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64   int iCnt;.#ifnd
1fcb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1fcc0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56 64  IRTUALTABLE.  Vd
1fcd0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e  be *pVdbe;.  iCn
1fce0 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
1fcf0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
1fd00 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64 62 65  dbe; pVdbe=pVdbe
1fd10 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1fd20 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
1fd30 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
1fd40 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
1fd50 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
1fd60 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
1fd70 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
1fd80 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
1fd90 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
1fda0 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  Cnt;.#endif.  if
1fdb0 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
1fdc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
1fdd0 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
1fde0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
1fdf0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
1fe00 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
1fe10 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
1fe20 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
1fe30 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1fe40 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
1fe50 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
1fe60 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
1fe70 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
1fe80 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
1fe90 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65  &iMoved);.    Me
1fea0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1feb0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
1fec0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
1fed0 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
1fee0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
1fef0 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
1ff00 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
1ff10 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
1ff20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
1ff30 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44  oved(&db->aDb[iD
1ff40 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  b], iMoved, pOp-
1ff50 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  >p1);.    }.#end
1ff60 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
1ff70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1ff80 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
1ff90 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
1ffa0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
1ffb0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1ffc0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1ffd0 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
1ffe0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1fff0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
20000 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
20010 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
20020 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
20030 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
20040 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
20050 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
20060 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
20070 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
20080 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
20090 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
200a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
200b0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
200c0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
200d0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
200e0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
200f0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
20100 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
20110 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
20120 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
20130 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
20140 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
20150 62 6c 65 20 72 65 66 65 72 65 64 20 74 6f 20 6d  ble refered to m
20160 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
20170 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
20180 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
20190 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
201a0 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
201b0 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
201c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
201d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
201e0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
201f0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
20200 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
20210 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
20220 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
20230 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
20240 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
20250 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
20260 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
20270 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
20280 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
20290 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
202a0 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
202b0 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
202c0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
202d0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
202e0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
202f0 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
20300 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
20310 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
20320 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
20330 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
20340 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
20350 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
20360 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
20370 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
20380 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
20390 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
203a0 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e     p->aMem[pOp->
203b0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
203c0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
203d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
203e0 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
203f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
20400 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
20410 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
20420 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
20430 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
20440 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
20450 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
20460 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
20470 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
20480 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
20490 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
204a0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
204b0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
204c0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
204d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
204e0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
204f0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
20500 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
20510 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
20520 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
20530 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
20540 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
20550 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
20560 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
20570 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
20580 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
20590 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
205a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
205b0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
205c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
205d0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
205e0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
205f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
20600 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
20610 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
20620 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
20630 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
20640 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
20650 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
20660 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
20670 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
20680 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
20690 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
206a0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
206b0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
206c0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
206d0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
206e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
206f0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
20700 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20710 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
20720 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
20730 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
20740 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
20750 20 69 6e 74 20 70 67 6e 6f 20 3d 20 30 3b 0a 20   int pgno = 0;. 
20760 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
20770 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
20780 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20790 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
207a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
207b0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
207c0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
207d0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
207e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
207f0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
20800 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
20810 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
20820 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
20830 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
20840 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
20850 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44  gs = BTREE_LEAFD
20860 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59  ATA|BTREE_INTKEY
20870 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
20880 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52  lags = BTREE_ZER
20890 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20  ODATA;.  }.  rc 
208a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
208b0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
208c0 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
208d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
208e0 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54   pgno;.  MemSetT
208f0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
20900 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
20910 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
20920 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32  arseSchema P1 P2
20930 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
20940 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
20950 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
20960 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
20970 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
20980 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
20990 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
209a0 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74  use P4.  P2 is t
209b0 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e  he "force" flag.
209c0 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20     Always do.** 
209d0 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50  the parsing if P
209e0 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50  2 is true.  If P
209f0 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e  2 is false, then
20a00 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
20a10 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74   a.** no-op if t
20a20 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74  he schema is not
20a30 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65   currently loade
20a40 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
20a50 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20  ds, if P2.** is 
20a60 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54  false, the SQLIT
20a70 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69  E_MASTER table i
20a80 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66  s only parsed if
20a90 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
20aa0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c  .** schema is al
20ab0 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74  ready loaded int
20ac0 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62  o the symbol tab
20ad0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
20ae0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
20af0 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
20b00 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
20b10 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
20b20 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
20b30 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
20b40 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
20b50 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
20b60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
20b70 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 63 68 61  eSchema: {.  cha
20b80 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 69  r *zSql;.  int i
20b90 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
20ba0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
20bb0 74 65 72 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  ter;.  InitData 
20bc0 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 61 73 73  initData;..  ass
20bd0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
20be0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
20bf0 69 66 28 20 21 70 4f 70 2d 3e 70 32 20 26 26 20  if( !pOp->p2 && 
20c00 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  !DbHasProperty(d
20c10 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
20c20 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20  aLoaded) ){.    
20c30 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 7a 4d 61  break;.  }.  zMa
20c40 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
20c50 42 4c 45 28 69 44 62 29 3b 0a 20 20 69 6e 69 74  BLE(iDb);.  init
20c60 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
20c70 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
20c80 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 69 74 44 61  Op->p1;.  initDa
20c90 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
20ca0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 7a 53 71  ->zErrMsg;.  zSq
20cb0 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
20cc0 74 66 28 64 62 2c 0a 20 20 20 20 20 22 53 45 4c  tf(db,.     "SEL
20cd0 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
20ce0 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
20cf0 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a  '.%s WHERE %s",.
20d00 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
20d10 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
20d20 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
20d30 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 67 6f  if( zSql==0 ) go
20d40 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 28 76 6f  to no_mem;.  (vo
20d50 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
20d60 4f 66 66 28 64 62 29 3b 0a 20 20 61 73 73 65 72  Off(db);.  asser
20d70 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
20d80 3d 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 69 6e 69  ==0 );.  db->ini
20d90 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 69 6e  t.busy = 1;.  in
20da0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
20db0 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28  TE_OK;.  assert(
20dc0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
20dd0 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ed );.  rc = sql
20de0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
20df0 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
20e00 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
20e10 74 61 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63  ta, 0);.  if( rc
20e20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
20e30 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
20e40 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
20e50 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 64 62 2d  db, zSql);.  db-
20e60 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
20e70 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53    (void)sqlite3S
20e80 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 69  afetyOn(db);.  i
20e90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
20ea0 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
20eb0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
20ec0 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
20ed0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
20ee0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20 21  IT_ANALYZE) && !
20ef0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20f00 4d 49 54 5f 50 41 52 53 45 52 29 0a 2f 2a 20 4f  MIT_PARSER)./* O
20f10 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
20f20 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
20f30 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
20f40 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
20f50 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
20f60 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
20f70 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
20f80 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
20f90 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
20fa0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
20fb0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
20fc0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
20fd0 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
20fe0 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
20ff0 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
21000 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
21010 6c 79 73 69 73 3a 20 7b 0a 20 20 69 6e 74 20 69  lysis: {.  int i
21020 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
21030 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
21040 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
21050 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
21060 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20  nalysisLoad(db, 
21070 69 44 62 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  iDb);.  break;  
21080 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
21090 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
210a0 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20 21 64  T_ANALYZE) && !d
210b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
210c0 49 54 5f 50 41 52 53 45 52 29 20 20 2a 2f 0a 0a  IT_PARSER)  */..
210d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
210e0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
210f0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
21100 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
21110 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
21120 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
21130 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
21140 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
21150 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
21160 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
21170 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
21180 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
21190 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
211a0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
211b0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
211c0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
211d0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
211e0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
211f0 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
21200 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
21210 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
21220 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
21230 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
21240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
21250 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
21260 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
21270 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
21280 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
21290 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
212a0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
212b0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
212c0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
212d0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
212e0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
212f0 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
21300 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
21310 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
21320 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
21330 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
21340 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
21350 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
21360 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
21370 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
21380 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
21390 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
213a0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
213b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
213c0 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
213d0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
213e0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
213f0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
21400 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
21410 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
21420 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
21430 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
21440 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
21450 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
21460 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
21470 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
21480 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
21490 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
214a0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
214b0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
214c0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
214d0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
214e0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
214f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
21500 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
21510 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
21520 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
21530 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21540 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
21550 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
21560 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
21570 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
21580 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
21590 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
215a0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
215b0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
215c0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
215d0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
215e0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
215f0 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
21600 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
21610 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
21620 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
21630 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
21640 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
21650 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
21660 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
21670 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
21680 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
21690 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
216a0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
216b0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
216c0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
216d0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
216e0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
216f0 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
21700 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
21710 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
21720 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
21730 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
21740 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
21750 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
21760 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
21770 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
21780 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
21790 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
217a0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
217b0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
217c0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
217d0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
217e0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
217f0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
21800 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
21810 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
21820 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
21830 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
21840 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
21850 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
21860 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
21870 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
21880 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
21890 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
218a0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
218b0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
218c0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
218d0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
218e0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
218f0 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
21900 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
21910 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
21920 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
21930 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
21940 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
21950 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
21960 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
21970 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
21980 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
21990 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
219a0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
219b0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
219c0 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
219d0 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
219e0 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a  remaining */.  .
219f0 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
21a00 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
21a10 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
21a20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
21a30 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
21a40 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
21a50 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
21a60 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
21a70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21a80 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
21a90 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45  p->nMem );.  pnE
21aa0 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  rr = &p->aMem[pO
21ab0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
21ac0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
21ad0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
21ae0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
21af0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
21b00 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
21b10 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70  0 );.  pIn1 = &p
21b20 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
21b30 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
21b40 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
21b50 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
21b60 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
21b70 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
21b80 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
21b90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21ba0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
21bb0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
21bc0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
21bd0 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a  ->p5))!=0 );.  z
21be0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
21bf0 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
21c00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
21c10 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
21c20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
21c50 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
21c60 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
21c70 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
21c80 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
21c90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
21ca0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
21cb0 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
21cc0 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
21cd0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
21ce0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
21cf0 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
21d00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
21d10 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
21d20 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
21d30 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
21d40 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
21d50 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
21d60 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
21d70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
21d80 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
21d90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
21da0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
21db0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
21dc0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
21dd0 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
21de0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  * * *.**.** Inse
21df0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
21e00 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
21e10 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
21e20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
21e30 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
21e40 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
21e50 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
21e60 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
21e70 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
21e80 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
21e90 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
21ea0 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 4d    Mem *pIdx;.  M
21eb0 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73 65  em *pVal;.  asse
21ec0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
21ed0 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65   pOp->p1<=p->nMe
21ee0 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26 70  m );.  pIdx = &p
21ef0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
21f00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21f10 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
21f20 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 56  =p->nMem );.  pV
21f30 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  al = &p->aMem[pO
21f40 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
21f50 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26  ( (pVal->flags &
21f60 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
21f70 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61    if( (pIdx->fla
21f80 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
21f90 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
21fa0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
21fb0 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69 66  et(pIdx);.    if
21fc0 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26  ( (pIdx->flags &
21fd0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
21fe0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
21ff0 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
22000 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e 75  etInsert(pIdx->u
22010 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d 3e  .pRowSet, pVal->
22020 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
22030 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
22040 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
22050 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61   * *.**.** Extra
22060 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  ct the smallest 
22070 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65  value from boole
22080 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20  an index P1 and 
22090 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
220a0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
220b0 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c  P3.  Or, if bool
220c0 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20  ean index P1 is 
220d0 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
220e0 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
220f0 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
22100 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
22110 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
22120 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
22130 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33 20    /* jump, out3 
22140 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a  */.  Mem *pIdx;.
22150 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73 73    i64 val;.  ass
22160 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
22170 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
22180 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46 4f  em );.  CHECK_FO
22190 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
221a0 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Idx = &p->aMem[p
221b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
221c0 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIdx->flags & ME
221d0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
221e0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
221f0 74 4e 65 78 74 28 70 49 64 78 2d 3e 75 2e 70 52  tNext(pIdx->u.pR
22200 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
22210 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
22220 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
22230 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
22240 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
22250 75 6c 6c 28 70 49 64 78 29 3b 0a 20 20 20 20 70  ull(pIdx);.    p
22260 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
22270 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
22280 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
22290 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
222a0 65 78 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  ex */.    assert
222b0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
222c0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
222d0 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70  );.    pOut = &p
222e0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
222f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
22300 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
22310 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72  , val);.  }.  br
22320 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
22330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
22340 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GGER./* Opcode: 
22350 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20 2a 20  ContextPush * * 
22360 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68  * .**.** Save th
22370 65 20 63 75 72 72 65 6e 74 20 56 64 62 65 20 63  e current Vdbe c
22380 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68 61 74  ontext such that
22390 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
223a0 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65 78 74  red by a Context
223b0 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54  Pop.** opcode. T
223c0 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65  he context store
223d0 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  s the last inser
223e0 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61  t row id, the la
223f0 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61  st statement cha
22400 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e  nge.** count, an
22410 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  d the current st
22420 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63  atement change c
22430 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ount..*/.case OP
22440 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a  _ContextPush: {.
22450 20 20 69 6e 74 20 69 20 3d 20 70 2d 3e 63 6f 6e    int i = p->con
22460 74 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a  textStackTop++;.
22470 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74    Context *pCont
22480 65 78 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ext;..  assert( 
22490 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58  i>=0 );.  /* FIX
224a0 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64   ME: This should
224b0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73   be allocated as
224c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 76 64 62   part of the vdb
224d0 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e at compile-tim
224e0 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d  e */.  if( i>=p-
224f0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70  >contextStackDep
22500 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e  th ){.    p->con
22510 74 65 78 74 53 74 61 63 6b 44 65 70 74 68 20 3d  textStackDepth =
22520 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e   i+1;.    p->con
22530 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71 6c 69  textStack = sqli
22540 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
22550 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78  ee(db, p->contex
22560 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20 20 20  tStack,.        
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74    sizeof(Context
225a0 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20 69 66  )*(i+1));.    if
225b0 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  ( p->contextStac
225c0 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  k==0 ) goto no_m
225d0 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65  em;.  }.  pConte
225e0 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74  xt = &p->context
225f0 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e  Stack[i];.  pCon
22600 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20  text->lastRowid 
22610 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
22620 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68  .  pContext->nCh
22630 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
22640 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
22650 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78  * Opcode: Contex
22660 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a  tPop * * * .**.*
22670 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20 56 64  * Restore the Vd
22680 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20 74 68  be context to th
22690 65 20 73 74 61 74 65 20 69 74 20 77 61 73 20 69  e state it was i
226a0 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74 50 75  n when contextPu
226b0 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65  sh was last.** e
226c0 78 65 63 75 74 65 64 2e 20 54 68 65 20 63 6f 6e  xecuted. The con
226d0 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20  text stores the 
226e0 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20  last insert row 
226f0 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61  id, the last sta
22700 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65  tement.** change
22710 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20   count, and the 
22720 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
22730 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a  t change count..
22740 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65  */.case OP_Conte
22750 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65  xtPop: {.  Conte
22760 78 74 20 2a 70 43 6f 6e 74 65 78 74 20 3d 20 26  xt *pContext = &
22770 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b  p->contextStack[
22780 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  --p->contextStac
22790 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28  kTop];.  assert(
227a0 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
227b0 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e  Top>=0 );.  db->
227c0 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e  lastRowid = pCon
227d0 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  text->lastRowid;
227e0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
227f0 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67  pContext->nChang
22800 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  e;.  break;.}.#e
22810 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
22820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
22830 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
22840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
22850 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
22860 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
22870 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
22880 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
22890 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
228a0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73  e maximum of its
228b0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a   current value.*
228c0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
228d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
228e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
228f0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
22900 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
22910 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
22920 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
22930 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
22940 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
22950 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
22960 32 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  2 */.  sqlite3Vd
22970 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
22980 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
22990 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
229a0 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
229b0 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
229c0 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
229d0 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
229e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
229f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
22a00 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
22a10 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
22a20 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20  : IfPos P1 P2 * 
22a30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
22a40 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
22a50 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
22a60 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50  eater, jump to P
22a70 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  2..**.** It is i
22a80 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
22a90 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
22aa0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
22ab0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
22ac0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
22ad0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
22ae0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
22af0 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
22b00 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
22b10 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
22b20 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
22b30 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
22b40 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
22b50 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
22b60 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
22b70 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
22b80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22b90 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a   IfNeg P1 P2 * *
22ba0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
22bb0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
22bc0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
22bd0 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  n zero, jump to 
22be0 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
22bf0 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
22c00 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
22c10 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
22c20 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
22c30 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22c40 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
22c50 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
22c60 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
22c70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67  */.case OP_IfNeg
22c80 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22c90 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73  mp, in1 */.  ass
22ca0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
22cb0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
22cc0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
22cd0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
22ce0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
22cf0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22d00 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
22d10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
22d20 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
22d30 73 74 65 72 20 50 31 20 69 73 20 65 78 61 63 74  ster P1 is exact
22d40 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
22d50 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
22d60 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
22d70 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
22d80 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
22d90 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
22da0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
22db0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
22dc0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
22dd0 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
22de0 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
22df0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22e00 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  p, in1 */.  asse
22e10 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
22e20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
22e30 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
22e40 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
22e50 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
22e60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22e70 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
22e80 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
22e90 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
22ea0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
22eb0 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
22ec0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
22ed0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
22ee0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
22ef0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
22f00 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
22f10 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
22f20 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65  unction.  Use re
22f30 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20  gister.** P3 as 
22f40 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  the accumulator.
22f50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
22f60 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
22f70 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
22f80 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
22f90 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73  ccessors..*/.cas
22fa0 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
22fb0 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
22fc0 35 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  5;.  int i;.  Me
22fd0 6d 20 2a 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a  m *pMem, *pRec;.
22fe0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
22ff0 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
23000 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
23010 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
23020 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e  );.  pRec = &p->
23030 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
23040 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
23050 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
23060 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
23070 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
23080 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
23090 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
230a0 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e  .    storeTypeIn
230b0 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e  fo(pRec, encodin
230c0 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  g);.  }.  ctx.pF
230d0 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
230e0 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
230f0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
23100 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
23110 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
23120 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
23130 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
23140 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
23150 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
23160 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
23170 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
23180 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
23190 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
231a0 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
231b0 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
231c0 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  oll = 0;.  if( c
231d0 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
231e0 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
231f0 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
23200 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
23210 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23220 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
23230 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
23240 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
23250 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
23260 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
23270 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
23280 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
23290 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
232a0 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
232b0 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73  l);.  if( ctx.is
232c0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
232d0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
232e0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
232f0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
23300 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
23310 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
23320 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
23330 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
23340 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
23350 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23360 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
23370 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
23380 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
23390 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
233a0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
233b0 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
233c0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
233d0 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
233e0 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
233f0 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
23400 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
23410 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
23420 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
23430 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
23440 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
23450 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
23460 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
23470 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
23480 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
23490 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
234a0 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
234b0 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
234c0 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
234d0 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
234e0 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
234f0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
23500 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
23510 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
23520 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
23530 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
23540 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
23550 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
23560 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
23570 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
23580 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
23590 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
235a0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
235b0 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
235c0 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
235d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
235e0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
235f0 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
23600 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
23610 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23620 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
23630 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
23640 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
23650 49 54 45 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20  ITE_ERROR ){.   
23660 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
23670 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
23680 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
23690 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
236a0 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
236b0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
236c0 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
236d0 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
236e0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
236f0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
23700 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
23710 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
23720 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
23730 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65  eak;.}...#if !de
23740 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23750 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
23760 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23770 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
23780 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
23790 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
237a0 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
237b0 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
237c0 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
237d0 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
237e0 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
237f0 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
23800 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
23810 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
23820 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
23830 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
23840 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20  Vacuum: {.  if( 
23850 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
23860 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
23870 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
23880 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33   .  rc = sqlite3
23890 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
238a0 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66  rrMsg, db);.  if
238b0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
238c0 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
238d0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
238e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
238f0 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
23900 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
23910 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
23920 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
23930 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23940 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
23950 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
23960 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
23970 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
23980 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
23990 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
239a0 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
239b0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
239c0 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
239d0 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
239e0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
239f0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
23a00 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
23a10 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23a20 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
23a30 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
23a40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23a50 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
23a60 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
23a70 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
23a80 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
23a90 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
23aa0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
23ab0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
23ac0 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
23ad0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23ae0 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
23af0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
23b00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
23b10 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
23b20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
23b30 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
23b40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
23b50 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
23b60 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
23b70 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
23b80 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
23b90 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
23ba0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
23bb0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
23bc0 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
23bd0 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
23be0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
23bf0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
23c00 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
23c10 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
23c20 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
23c30 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
23c40 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
23c50 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
23c60 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
23c70 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
23c80 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
23c90 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
23ca0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
23cb0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
23cc0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
23cd0 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
23ce0 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
23cf0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
23d00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
23d10 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
23d20 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
23d30 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
23d40 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
23d50 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
23d60 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
23d70 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
23d80 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
23d90 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
23da0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
23db0 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  . .**.** If P1 i
23dc0 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  s  the index of 
23dd0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
23de0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
23df0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
23e00 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
23e10 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
23e20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
23e30 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
23e40 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
23e50 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
23e60 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
23e70 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
23e80 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
23e90 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
23ea0 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
23eb0 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
23ec0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
23ed0 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
23ee0 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
23ef0 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
23f00 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
23f10 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
23f20 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
23f30 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
23f40 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d  .  int p1 = pOp-
23f50 3e 70 31 3b 20 0a 20 20 75 38 20 69 73 57 72 69  >p1; .  u8 isWri
23f60 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
23f70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
23f80 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
23f90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
23fa0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
23fb0 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
23fc0 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
23fd0 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
23fe0 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
23ff0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24000 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
24010 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
24020 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
24030 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
24040 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
24050 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
24060 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
24070 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
24080 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
24090 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  b, "database tab
240a0 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
240b0 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ", z);.  }.  bre
240c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
240d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
240e0 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
240f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24100 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
24110 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
24120 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
24130 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
24140 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
24150 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
24160 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
24170 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
24180 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
24190 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
241a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
241b0 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
241c0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
241d0 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
241e0 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
241f0 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
24200 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
24210 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
24220 74 20 69 73 2c 20 73 65 74 20 74 68 65 0a 2a 2a  t is, set the.**
24230 20 65 72 72 6f 72 20 63 6f 64 65 20 74 6f 20 53   error code to S
24240 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
24250 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
24260 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
24270 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  b *pVtab = pOp->
24280 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
24290 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
242a0 6e 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  n(db, pVtab);.  
242b0 69 66 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20  if( pVtab ){.   
242c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
242d0 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
242e0 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
242f0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
24300 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
24310 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  Msg = 0;.  }.  b
24320 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
24330 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
24340 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
24350 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24360 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
24370 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
24380 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
24390 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
243a0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
243b0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
243c0 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
243d0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
243e0 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
243f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
24400 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
24410 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
24420 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
24430 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
24440 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
24450 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
24460 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24470 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
24480 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24490 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
244a0 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
244b0 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
244c0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
244d0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
244e0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
244f0 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
24500 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
24510 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
24520 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
24530 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
24540 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
24550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
24560 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
24570 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
24580 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
24590 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
245a0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
245b0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
245c0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
245d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
245e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
245f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
24600 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
24610 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
24620 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
24630 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
24640 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
24650 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
24660 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
24670 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
24680 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
24690 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
246a0 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
246b0 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
246c0 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
246d0 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
246e0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 30  Cursor *pCur = 0
246f0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
24700 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
24710 72 73 6f 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c  rsor = 0;..  sql
24720 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
24730 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
24740 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
24750 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73  le *pModule = (s
24760 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
24770 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
24780 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
24790 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69  && pModule);.  i
247a0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
247b0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
247c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
247d0 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  se;.  rc = pModu
247e0 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
247f0 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
24800 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
24810 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
24820 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
24830 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
24840 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
24850 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
24860 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
24870 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24880 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66  _to_misuse;.  if
24890 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
248a0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
248b0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
248c0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
248d0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
248e0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
248f0 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
24900 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
24910 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
24920 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
24930 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
24940 2d 3e 70 31 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20  ->p1, &pOp[-1], 
24950 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  -1, 0);.    if( 
24960 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43  pCur ){.      pC
24970 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
24980 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  = pVtabCursor;. 
24990 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75       pCur->pModu
249a0 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  le = pVtabCursor
249b0 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ->pVtab->pModule
249c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
249d0 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
249e0 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70  led = 1;.      p
249f0 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70  Module->xClose(p
24a00 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
24a10 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
24a20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
24a30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24a40 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
24a50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24a60 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
24a70 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20  ode: VFilter P1 
24a80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
24a90 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
24aa0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
24ab0 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
24ac0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
24ad0 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
24ae0 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
24af0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
24b00 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
24b10 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
24b20 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
24b30 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
24b40 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
24b50 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
24b60 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
24b70 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
24b80 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
24b90 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
24ba0 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
24bb0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
24bc0 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
24bd0 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
24be0 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
24bf0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
24c00 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
24c10 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
24c20 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
24c30 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24c40 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
24c50 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
24c60 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
24c70 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
24c80 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
24c90 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
24ca0 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
24cb0 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
24cc0 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
24cd0 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
24ce0 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
24cf0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
24d00 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
24d10 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
24d20 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
24d30 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
24d40 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
24d50 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
24d60 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
24d70 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
24d80 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
24d90 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
24da0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
24db0 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
24dc0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
24dd0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
24de0 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 20 3d  .  Mem *pQuery =
24df0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
24e00 33 5d 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  3];.  Mem *pArgc
24e10 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
24e20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
24e30 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
24e40 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
24e50 62 20 2a 70 56 74 61 62 3b 0a 0a 20 20 56 64 62  b *pVtab;..  Vdb
24e60 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
24e70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24e80 5d 3b 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54  ];..  REGISTER_T
24e90 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
24ea0 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
24eb0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
24ec0 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
24ed0 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
24ee0 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
24ef0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
24f00 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
24f10 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
24f20 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
24f30 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
24f40 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
24f50 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
24f60 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
24f70 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
24f80 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
24f90 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
24fa0 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
24fb0 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
24fc0 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
24fd0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
24fe0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
24ff0 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  .  {.    int res
25000 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b   = 0;.    int i;
25010 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  .    Mem **apArg
25020 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
25030 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
25040 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
25050 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
25060 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74  c[i+1];.      st
25070 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70 41 72  oreTypeInfo(apAr
25080 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  g[i], 0);.    }.
25090 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
250a0 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
250b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
250c0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71  o_misuse;.    sq
250d0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56  lite3VtabLock(pV
250e0 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  tab);.    p->inV
250f0 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
25100 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
25110 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
25120 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
25130 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
25140 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
25150 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
25160 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
25170 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
25180 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
25190 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
251a0 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
251b0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
251c0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
251d0 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
251e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
251f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73  _OK ){.      res
25200 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
25210 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
25220 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
25230 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
25240 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
25250 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
25260 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
25270 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
25280 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
25290 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
252a0 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
252b0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
252c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
252d0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
252e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
252f0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
25300 65 3a 20 56 52 6f 77 69 64 20 50 31 20 50 32 20  e: VRowid P1 P2 
25310 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
25320 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
25330 50 32 20 20 74 68 65 20 72 6f 77 69 64 20 6f 66  P2  the rowid of
25340 0a 2a 2a 20 74 68 65 20 76 69 72 74 75 61 6c 2d  .** the virtual-
25350 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 50  table that the P
25360 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
25370 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61 73 65  ting to..*/.case
25380 20 4f 50 5f 56 52 6f 77 69 64 3a 20 7b 20 20 20   OP_VRowid: {   
25390 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
253a0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
253b0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
253c0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
253d0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
253e0 4d 6f 64 75 6c 65 3b 0a 20 20 73 71 6c 69 74 65  Module;.  sqlite
253f0 5f 69 6e 74 36 34 20 69 52 6f 77 3b 0a 20 20 56  _int64 iRow;.  V
25400 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
25410 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25420 70 31 5d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  p1];..  assert( 
25430 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25440 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
25450 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
25460 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
25470 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
25480 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
25490 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
254a0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
254b0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
254c0 6f 77 69 64 20 29 3b 0a 20 20 69 66 28 20 73 71  owid );.  if( sq
254d0 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
254e0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
254f0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
25500 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
25510 52 6f 77 69 64 28 70 43 75 72 2d 3e 70 56 74 61  Rowid(pCur->pVta
25520 62 43 75 72 73 6f 72 2c 20 26 69 52 6f 77 29 3b  bCursor, &iRow);
25530 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
25540 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
25550 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
25560 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
25570 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
25580 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  g = 0;.  if( sql
25590 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
255a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
255b0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 4d  e_to_misuse;.  M
255c0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
255d0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
255e0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 52 6f 77  pOut->u.i = iRow
255f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
25600 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
25610 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
25620 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
25630 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25640 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
25650 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
25660 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
25670 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
25680 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
25690 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
256a0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
256b0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
256c0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
256d0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
256e0 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
256f0 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
25700 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
25710 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
25720 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
25730 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
25740 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
25750 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
25760 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
25770 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
25780 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25790 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
257a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
257b0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
257c0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
257d0 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  m );.  pDest = &
257e0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
257f0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
25800 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
25810 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
25820 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
25830 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
25840 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
25850 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
25860 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
25870 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
25880 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
25890 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
258a0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
258b0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
258c0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
258d0 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
258e0 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
258f0 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
25900 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
25910 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
25920 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
25930 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
25940 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
25950 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
25960 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
25970 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
25980 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
25990 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
259a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
259b0 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
259c0 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
259d0 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
259e0 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
259f0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
25a00 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
25a10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25a20 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
25a30 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
25a40 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
25a50 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
25a60 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74  Op->p2);.  sqlit
25a70 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
25a80 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
25a90 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
25aa0 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
25ab0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a  ->zErrMsg = 0;..
25ac0 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
25ad0 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
25ae0 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72  tion to the P3 r
25af0 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a  egister. We.  **
25b00 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c   do this regardl
25b10 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
25b20 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f  r not an error o
25b30 63 63 75 72 65 64 20 74 6f 20 65 6e 73 75 72 65  ccured to ensure
25b40 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
25b50 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
25b60 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
25b70 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
25b80 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
25b90 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
25ba0 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
25bb0 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
25bc0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
25bd0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
25be0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
25bf0 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26  MemMove(pDest, &
25c00 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55  sContext.s);.  U
25c10 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
25c20 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
25c30 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
25c40 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74  n(db) ){.    got
25c50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
25c60 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28  isuse;.  }.  if(
25c70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
25c80 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
25c90 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
25ca0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25cb0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
25cc0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25cd0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
25ce0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25cf0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
25d00 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
25d10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
25d20 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
25d30 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
25d40 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
25d50 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
25d60 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
25d70 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
25d80 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
25d90 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
25da0 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
25db0 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
25dc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25dd0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
25de0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
25df0 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
25e00 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
25e10 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
25e20 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
25e30 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
25e40 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 0a 20 20  int res = 0;..  
25e50 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
25e60 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25e70 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25e80 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25e90 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
25ea0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
25eb0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
25ec0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
25ed0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
25ee0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
25ef0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
25f00 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
25f10 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
25f20 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
25f30 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
25f40 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
25f50 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
25f60 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
25f70 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
25f80 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
25f90 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
25fa0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
25fb0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
25fc0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
25fd0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
25fe0 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
25ff0 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
26000 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
26010 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
26020 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
26030 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
26040 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
26050 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
26060 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
26070 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
26080 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
26090 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
260a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
260b0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71  _to_misuse;.  sq
260c0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56  lite3VtabLock(pV
260d0 74 61 62 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  tab);.  p->inVta
260e0 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
260f0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
26100 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
26110 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
26120 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
26130 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
26140 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
26150 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
26160 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
26170 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
26180 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61   0;.  sqlite3Vta
26190 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
261a0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
261b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
261c0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
261d0 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
261e0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28  rsor);.  }.  if(
261f0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
26200 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
26210 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
26220 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ..  if( !res ){.
26230 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
26240 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
26250 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
26260 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
26270 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
26280 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
26290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
262a0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
262b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
262c0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
262d0 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34  Rename P1 * * P4
262e0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
262f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
26300 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
26310 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
26320 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
26330 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
26340 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
26350 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20  ponding xRename 
26360 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75  method. The valu
26370 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72  e.** in register
26380 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73   P1 is passed as
26390 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d   the zName argum
263a0 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61  ent to the xRena
263b0 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61  me method..*/.ca
263c0 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b  se OP_VRename: {
263d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
263e0 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34  *pVtab = pOp->p4
263f0 2e 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70  .pVtab;.  Mem *p
26400 4e 61 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  Name = &p->aMem[
26410 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26420 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  rt( pVtab->pModu
26430 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20  le->xRename );. 
26440 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
26450 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
26460 0a 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 4e  ..  Stringify(pN
26470 61 6d 65 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ame, encoding);.
26480 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
26490 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
264a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
264b0 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65  misuse;.  sqlite
264c0 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29  3VtabLock(pVtab)
264d0 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
264e0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
264f0 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
26500 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
26510 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
26520 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
26530 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
26540 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
26550 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  Msg = 0;.  sqlit
26560 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
26570 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
26580 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
26590 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
265a0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
265b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
265c0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
265d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
265e0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
265f0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
26600 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
26610 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
26620 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
26630 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
26640 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
26650 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26660 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
26670 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
26680 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
26690 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
266a0 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
266b0 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
266c0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
266d0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
266e0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
266f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
26700 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
26710 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
26720 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
26730 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
26740 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
26750 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
26760 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
26770 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
26780 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
26790 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
267a0 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
267b0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
267c0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
267d0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
267e0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
267f0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
26800 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
26810 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
26820 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
26830 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
26840 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
26850 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
26860 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
26870 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
26880 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
26890 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
268a0 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
268b0 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
268c0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
268d0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
268e0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
268f0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
26900 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
26910 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
26920 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
26930 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
26940 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
26950 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
26960 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
26970 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
26980 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
26990 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
269a0 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
269b0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
269c0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
269d0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
269e0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
269f0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
26a00 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
26a10 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
26a20 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erted..*/.case O
26a30 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
26a40 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
26a50 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
26a60 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  ab;.  sqlite3_mo
26a70 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20  dule *pModule = 
26a80 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
26a90 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
26aa0 3b 0a 20 20 69 6e 74 20 6e 41 72 67 20 3d 20 70  ;.  int nArg = p
26ab0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
26ac0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
26ad0 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
26ae0 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
26af0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
26b00 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
26b10 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 72 65  zErrMsg, db, "re
26b20 61 64 2d 6f 6e 6c 79 20 74 61 62 6c 65 22 29 3b  ad-only table");
26b30 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
26b40 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b  _ERROR;.  }else{
26b50 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
26b60 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
26b70 69 64 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70  id;.    Mem **ap
26b80 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
26b90 20 20 20 20 4d 65 6d 20 2a 70 58 20 3d 20 26 70      Mem *pX = &p
26ba0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
26bb0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
26bc0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
26bd0 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
26be0 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70  pX, 0);.      ap
26bf0 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
26c00 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
26c10 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
26c20 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
26c30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26c40 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69  misuse;.    sqli
26c50 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61  te3VtabLock(pVta
26c60 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  b);.    rc = pMo
26c70 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
26c80 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
26c90 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 73  , &rowid);.    s
26ca0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
26cb0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
26cc0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
26cd0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
26ce0 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
26cf0 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  g = 0;.    sqlit
26d00 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
26d10 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
26d20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
26d30 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
26d40 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
26d50 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
26d60 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
26d70 4b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  K ){.      asser
26d80 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
26d90 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
26da0 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
26db0 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
26dc0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77  >lastRowid = row
26dd0 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  id;.    }.    p-
26de0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a  >nChange++;.  }.
26df0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26e00 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
26e10 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
26e20 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
26e30 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
26e40 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
26e50 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
26e60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
26e70 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
26e80 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
26e90 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
26ea0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
26eb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
26ec0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
26ed0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
26ee0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
26ef0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
26f00 69 6e 74 20 6e 50 61 67 65 3b 0a 20 20 50 61 67  int nPage;.  Pag
26f10 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
26f20 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
26f30 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29 3b  b->aDb[p1].pBt);
26f40 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
26f50 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70  PagerPagecount(p
26f60 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a  Pager, &nPage);.
26f70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
26f80 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  _OK ){.    pOut-
26f90 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
26fa0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
26fb0 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62  = nPage;.  }.  b
26fc0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
26fd0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26fe0 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63  MIT_TRACE./* Opc
26ff0 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a  ode: Trace * * *
27000 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74   P4 *.**.** If t
27010 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  racing is enable
27020 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65  d (by the sqlite
27030 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72  3_trace()) inter
27040 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  face, then.** th
27050 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63  e UTF-8 string c
27060 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69  ontained in P4 i
27070 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  s emitted on the
27080 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
27090 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63  .*/.case OP_Trac
270a0 65 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e: {.  if( pOp->
270b0 70 34 2e 7a 20 29 7b 0a 20 20 20 20 69 66 28 20  p4.z ){.    if( 
270c0 64 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20  db->xTrace ){.  
270d0 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
270e0 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 4f  b->pTraceArg, pO
270f0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
27100 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27110 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d  BUG.    if( (db-
27120 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
27130 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a  SqlTrace)!=0 ){.
27140 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62        sqlite3Deb
27150 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
27160 61 63 65 3a 20 25 73 5c 6e 22 2c 20 70 4f 70 2d  ace: %s\n", pOp-
27170 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 65  >p4.z);.    }.#e
27180 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
27190 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
271a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
271b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
271c0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
271d0 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
271e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
271f0 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
27200 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
27210 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
27220 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
27230 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
27240 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
27250 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
27260 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
27270 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
27280 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
27290 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
272a0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
272b0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
272c0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
272d0 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
272e0 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
272f0 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
27300 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
27310 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
27320 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
27330 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
27340 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
27350 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
27360 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65  Explain */.  bre
27370 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
27380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
273a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
273b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
273c0 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
273d0 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
273e0 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
273f0 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
27400 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
27410 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
27420 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
27430 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
27440 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
27450 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
27460 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
27470 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
27480 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
27490 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
274a0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
274b0 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
274c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
274d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
274e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
274f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27500 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
27510 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
27520 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
27530 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74   elapsed = sqlit
27540 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61  e3Hwtime() - sta
27550 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  rt;.      pOp->c
27560 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64  ycles += elapsed
27570 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
27580 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  ++;.#if 0.      
27590 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
275a0 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61  , "%10llu ", ela
275b0 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73  psed);.        s
275c0 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
275d0 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63  p(stdout, origPc
275e0 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63  , &p->aOp[origPc
275f0 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
27600 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
27610 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
27620 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
27630 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
27640 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
27650 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
27660 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
27670 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
27680 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
27690 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
276a0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
276b0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
276c0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
276d0 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
276e0 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
276f0 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
27700 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
27710 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
27720 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
27730 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
27740 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
27750 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
27760 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
27770 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b   if( p->trace ){
27780 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
27790 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72   ) fprintf(p->tr
277a0 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ace,"rc=%d\n",rc
277b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50  );.      if( opP
277c0 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
277d0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20  OUT2_PRERELEASE 
277e0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
277f0 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
27800 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  e, pOp->p2, pOut
27810 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
27820 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20   if( opProperty 
27830 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
27840 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
27850 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
27860 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
27870 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
27880 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
27890 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
278a0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
278b0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
278c0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
278d0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
278e0 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
278f0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
27900 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
27910 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
27920 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
27930 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
27940 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
27950 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
27960 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
27970 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
27980 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
27990 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
279a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
279b0 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
279c0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
279d0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
279e0 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  RROR;..  /* This
279f0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
27a00 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
27a10 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
27a20 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
27a30 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
27a40 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
27a50 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
27a60 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
27a70 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c  be_return:.  sql
27a80 69 74 65 33 42 74 72 65 65 4d 75 74 65 78 41 72  ite3BtreeMutexAr
27a90 72 61 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75  rayLeave(&p->aMu
27aa0 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
27ab0 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
27ac0 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
27ad0 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
27ae0 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
27af0 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
27b00 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
27b10 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
27b20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
27b30 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
27b40 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
27b50 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
27b60 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
27b70 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
27b80 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
27b90 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
27ba0 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
27bb0 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
27bc0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
27bd0 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
27be0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
27bf0 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
27c00 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
27c10 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
27c20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
27c30 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
27c40 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
27c50 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
27c60 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  error..  */.abor
27c70 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a  t_due_to_misuse:
27c80 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d  .  rc = SQLITE_M
27c90 49 53 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ISUSE;.  /* Fall
27ca0 20 74 68 72 75 20 69 6e 74 6f 20 61 62 6f 72 74   thru into abort
27cb0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f  _due_to_error */
27cc0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
27cd0 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
27ce0 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
27cf0 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
27d00 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
27d10 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
27d20 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
27d30 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
27d40 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
27d50 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
27d60 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
27d70 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
27d80 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
27d90 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
27da0 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
27db0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
27dc0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
27dd0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
27de0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
27df0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
27e00 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
27e10 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
27e20 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
27e30 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
27e40 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
27e50 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
27e60 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
27e70 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
27e80 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
27e90 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
27ea0 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
27eb0 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
27ec0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
27ed0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
27ee0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
27ef0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
27f00 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
27f10 61 6c 74 3b 0a 7d 0a                             alt;.}.