/ Hex Artifact Content
Login

Artifact c7da2727447ef5ebe9a25ed37796a493fd12d781:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 37 39 32 20 32 30 30 38  e.c,v 1.792 2008
0850: 2f 31 32 2f 30 36 20 31 36 3a 34 36 3a 31 34 20  /12/06 16:46:14 
0860: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
0870: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0880: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74  .h".#include <ct
0890: 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ype.h>.#include 
08a0: 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a  "vdbeInt.h"../*.
08b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
08c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
08d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
08e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
08f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0900: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 4d  ther by the OP_M
0910: 6f 76 65 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  oveXX, OP_Next, 
0920: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0930: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0940: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0950: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0960: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0970: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0980: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0990: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
09a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
09b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
09c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
09f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0a00: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0a10: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0a20: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0a30: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0a40: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0a50: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0a60: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0a70: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0a80: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0a90: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
0aa0: 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20 7a    When reaches z
0ab0: 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49 6e  ero, the u1.isIn
0ac0: 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69 65  terrupted.** fie
0ad0: 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ld of the sqlite
0ae0: 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73  3 structure is s
0af0: 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73  et in order to s
0b00: 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74 65  imulate and inte
0b10: 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  rrupt..**.** Thi
0b20: 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75 73  s facility is us
0b30: 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70  ed for testing p
0b40: 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49  urposes only.  I
0b50: 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74  t does not funct
0b60: 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64  ion.** in an ord
0b70: 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a  inary build..*/.
0b80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0b90: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  ST.int sqlite3_i
0ba0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d  nterrupt_count =
0bb0: 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   0;.#endif../*.*
0bc0: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0bd0: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0be0: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0bf0: 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  ype the OP_Sort 
0c00: 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65  opcode.** is exe
0c10: 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73 74  cuted.  The test
0c20: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0c30: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0c40: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0c50: 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73  at.** sorting is
0c60: 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f   occurring or no
0c70: 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20 61  t occurring at a
0c80: 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65 73  ppropriate times
0c90: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0ca0: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0cb0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0cc0: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0cd0: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ce0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0cf0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0d00: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0d10: 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63  t sqlite3_sort_c
0d20: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0d30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  ../*.** The next
0d40: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
0d50: 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69 7a   records the siz
0d60: 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  e of the largest
0d70: 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20   MEM_Blob.** or 
0d80: 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61 73  MEM_Str that has
0d90: 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61 20   been used by a 
0da0: 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54 68  VDBE opcode.  Th
0db0: 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65  e test procedure
0dc0: 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69 6e  s.** use this in
0dd0: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b  formation to mak
0de0: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
0df0: 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69  zero-blob functi
0e00: 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f  onality.** is wo
0e10: 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e  rking correctly.
0e20: 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65     This variable
0e30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0e40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
0e50: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
0e60: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
0e70: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
0e80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0e90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0ea0: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0eb0: 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 76  ze = 0;.static v
0ec0: 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  oid updateMaxBlo
0ed0: 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20  bsize(Mem *p){. 
0ee0: 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26   if( (p->flags &
0ef0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
0f00: 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e  ob))!=0 && p->n>
0f10: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0f20: 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  size ){.    sqli
0f30: 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
0f40: 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23   = p->n;.  }.}.#
0f50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  endif../*.** Tes
0f60: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20  t a register to 
0f70: 73 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64  see if it exceed
0f80: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61  s the current ma
0f90: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0fa0: 0a 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20  .** If it does, 
0fb0: 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d  record the new m
0fc0: 61 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65  aximum blob size
0fd0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0fe0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
0ff0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1000: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1010: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44  ST).# define UPD
1020: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
1030: 28 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c  (P)  updateMaxBl
1040: 6f 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a  obsize(P).#else.
1050: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
1060: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a  MAX_BLOBSIZE(P).
1070: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
1080: 6e 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20  nvert the given 
1090: 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20  register into a 
10a0: 73 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e  string if it isn
10b0: 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64  't one.** alread
10c0: 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  y. Return non-ze
10d0: 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ro if a malloc()
10e0: 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69   fails..*/.#defi
10f0: 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20  ne Stringify(P, 
1100: 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50  enc) \.   if(((P
1110: 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74  )->flags&(MEM_St
1120: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
1130: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
1140: 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63  mStringify(P,enc
1150: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1160: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1170: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1180: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1190: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
11a0: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
11b0: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
11c0: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
11d0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
11e0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
11f0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
1200: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
1210: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
1220: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
1230: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1240: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1250: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1260: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1270: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1280: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1290: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
12a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
12b0: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
12c0: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
12d0: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
12e0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
12f0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
1300: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
1310: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
1320: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
1330: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1340: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1350: 6e 20 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67  n MEM_Dyn string
1360: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65  ..*/.#define Dee
1370: 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c  phemeralize(P) \
1380: 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c  .   if( ((P)->fl
1390: 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  ags&MEM_Ephem)!=
13a0: 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71  0 \.       && sq
13b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
13c0: 57 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20  Writeable(P) ){ 
13d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f  goto no_mem;}../
13e0: 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65  *.** Call sqlite
13f0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
1400: 6f 62 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70  ob() on the supp
1410: 6c 69 65 64 20 76 61 6c 75 65 20 28 74 79 70 65  lied value (type
1420: 20 4d 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72   Mem*).** P if r
1430: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66  equired..*/.#def
1440: 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50  ine ExpandBlob(P
1450: 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  ) (((P)->flags&M
1460: 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33  EM_Zero)?sqlite3
1470: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
1480: 62 28 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  b(P):0)../*.** A
1490: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
14a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
14b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
14c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
14d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
14e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
14f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1500: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1510: 75 65 72 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63  uery..** The sec
1520: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 2c 20 27 64  ond argument, 'd
1530: 62 5f 65 6e 63 27 20 69 73 20 74 68 65 20 74 65  b_enc' is the te
1540: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
1550: 20 62 79 20 74 68 65 20 76 64 62 65 20 66 6f 72   by the vdbe for
1560: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 76 61 72  .** register var
1570: 69 61 62 6c 65 73 2e 20 20 54 68 69 73 20 72 6f  iables.  This ro
1580: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1590: 4d 65 6d 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65  Mem->enc and pMe
15a0: 6d 2d 3e 74 79 70 65 0a 2a 2a 20 76 61 72 69 61  m->type.** varia
15b0: 62 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65  bles used by the
15c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a   sqlite3_value_*
15d0: 28 29 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  () routines..*/.
15e0: 23 64 65 66 69 6e 65 20 73 74 6f 72 65 54 79 70  #define storeTyp
15f0: 65 49 6e 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72  eInfo(A,B) _stor
1600: 65 54 79 70 65 49 6e 66 6f 28 41 29 0a 73 74 61  eTypeInfo(A).sta
1610: 74 69 63 20 76 6f 69 64 20 5f 73 74 6f 72 65 54  tic void _storeT
1620: 79 70 65 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65  ypeInfo(Mem *pMe
1630: 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20  m){.  int flags 
1640: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20  = pMem->flags;. 
1650: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1660: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65  _Null ){.    pMe
1670: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
1680: 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73  _NULL;.  }.  els
1690: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16a0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65  M_Int ){.    pMe
16b0: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
16c0: 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20  _INTEGER;.  }.  
16d0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
16e0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
16f0: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1700: 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a  LITE_FLOAT;.  }.
1710: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1720: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
1730: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1740: 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65  QLITE_TEXT;.  }e
1750: 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  lse{.    pMem->t
1760: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
1770: 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  B;.  }.}../*.** 
1780: 50 72 6f 70 65 72 74 69 65 73 20 6f 66 20 6f 70  Properties of op
1790: 63 6f 64 65 73 2e 20 20 54 68 65 20 4f 50 46 4c  codes.  The OPFL
17a0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61  G_INITIALIZER ma
17b0: 63 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  cro is.** create
17c0: 64 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61  d by mkopcodeh.a
17d0: 77 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c  wk during compil
17e0: 61 74 69 6f 6e 2e 20 20 44 61 74 61 20 69 73 20  ation.  Data is 
17f0: 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d  obtained.** from
1800: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f   the comments fo
1810: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 22 63 61 73  llowing the "cas
1820: 65 20 4f 50 5f 78 78 78 78 3a 22 20 73 74 61 74  e OP_xxxx:" stat
1830: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69  ements in.** thi
1840: 73 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61  s file.  .*/.sta
1850: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
1860: 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65 50 72  ed char opcodePr
1870: 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47  operty[] = OPFLG
1880: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f  _INITIALIZER;../
1890: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
18a0: 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20 68 61   if an opcode ha
18b0: 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f 50 46  s any of the OPF
18c0: 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74 69 65  LG_xxx propertie
18d0: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
18e0: 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73  y mask..*/.int s
18f0: 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f 64 65  qlite3VdbeOpcode
1900: 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e 74 20  HasProperty(int 
1910: 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b  opcode, int mask
1920: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f 70 63  ){.  assert( opc
1930: 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c  ode>0 && opcode<
1940: 28 69 6e 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f  (int)sizeof(opco
1950: 64 65 50 72 6f 70 65 72 74 79 29 20 29 3b 0a 20  deProperty) );. 
1960: 20 72 65 74 75 72 6e 20 28 6f 70 63 6f 64 65 50   return (opcodeP
1970: 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26  roperty[opcode]&
1980: 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  mask)!=0;.}../*.
1990: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65  ** Allocate Vdbe
19a0: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43  Cursor number iC
19b0: 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ur.  Return a po
19c0: 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65  inter to it.  Re
19d0: 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20  turn NULL.** if 
19e0: 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65  we run out of me
19f0: 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mory..*/.static 
1a00: 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f  VdbeCursor *allo
1a10: 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64  cateCursor(.  Vd
1a20: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
1a30: 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75      /* The virtu
1a40: 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20  al machine */.  
1a50: 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20  int iCur,       
1a60: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1a70: 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75  f the new VdbeCu
1a80: 72 73 6f 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  rsor */.  Op *pO
1a90: 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p,              
1aa0: 2f 2a 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c  /* */.  int iDb,
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ac0: 20 57 68 65 6e 20 64 61 74 61 62 61 73 65 20 74   When database t
1ad0: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1ae0: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1af0: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1b00: 6f 72 20 20 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a  or     /* */.){.
1b10: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
1b20: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
1b30: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
1b40: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
1b50: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
1b60: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
1b70: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1b80: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1b90: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1ba0: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1bb0: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1bc0: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1bd0: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1be0: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1bf0: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1c00: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1c10: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
1c20: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
1c30: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
1c40: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
1c50: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
1c60: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
1c70: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1c80: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1c90: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1ca0: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1cb0: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1cc0: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1cd0: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1ce0: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1cf0: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1d00: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1d10: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
1d20: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1d30: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
1d40: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
1d50: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
1d60: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
1d70: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1d80: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1d90: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1da0: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1db0: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1dc0: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1dd0: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1de0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1df0: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1e00: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1e10: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
1e20: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
1e30: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
1e40: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
1e50: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
1e60: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
1e70: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1e80: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1e90: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1ea0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1eb0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1ec0: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1ed0: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1ee0: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1ef0: 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63 6f 64   /* If the opcod
1f00: 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50 5f 53  e of pOp is OP_S
1f10: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20 74 68  etNumColumns, th
1f20: 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e 74 61  en pOp->p2 conta
1f30: 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  ins.  ** the num
1f40: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1f50: 20 74 68 65 20 72 65 63 6f 72 64 73 20 63 6f 6e   the records con
1f60: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61  tained in the ta
1f70: 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e 64 65  ble or.  ** inde
1f80: 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1f90: 55 73 65 20 74 68 69 73 20 74 6f 20 72 65 73 65  Use this to rese
1fa0: 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 74 68  rve space for th
1fb0: 65 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73  e .  ** VdbeCurs
1fc0: 6f 72 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79  or.aType[] array
1fd0: 2e 0a 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ..  */.  int nFi
1fe0: 65 6c 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  eld = 0;.  if( p
1ff0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2000: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20  etNumColumns || 
2010: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2020: 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b  OpenEphemeral ){
2030: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
2040: 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79  p->p2;.  }.  nBy
2050: 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65  te = .      size
2060: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b  of(VdbeCursor) +
2070: 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65   .      (isBtree
2080: 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74  Cursor?sqlite3Bt
2090: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a  reeCursorSize():
20a0: 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46  0) + .      2*nF
20b0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
20c0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
20d0: 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  r<p->nCursor );.
20e0: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
20f0: 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  Cur] ){.    sqli
2100: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
2110: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
2120: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
2130: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2140: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2150: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2160: 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74  mGrow(pMem, nByt
2170: 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e  e, 0) ){.    p->
2180: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2190: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
21a0: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
21b0: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
21c0: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78   nByte);.    pCx
21d0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
21e0: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
21f0: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e  Field;.    if( n
2200: 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70  Field ){.      p
2210: 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32  Cx->aType = (u32
2220: 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65   *)&pMem->z[size
2230: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b  of(VdbeCursor)];
2240: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
2250: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2260: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2270: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2280: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2290: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
22a0: 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a  ursor)+2*nField*
22b0: 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20  sizeof(u32)];.  
22c0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
22d0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
22e0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
22f0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
2300: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2310: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
2320: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
2330: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2340: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2350: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2360: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2370: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2380: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2390: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
23a0: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
23b0: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
23c0: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73  e it alone..*/.s
23d0: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
23e0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
23f0: 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66  Mem *pRec){.  if
2400: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2410: 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49   (MEM_Real|MEM_I
2420: 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt))==0 ){.    i
2430: 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20  nt realnum;.    
2440: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2450: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2460: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2470: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a  >flags&MEM_Str).
2480: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
2490: 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63  te3IsNumber(pRec
24a0: 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70  ->z, &realnum, p
24b0: 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20  Rec->enc) ){.   
24c0: 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20     i64 value;.  
24d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
24e0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52  hangeEncoding(pR
24f0: 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  ec, SQLITE_UTF8)
2500: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61  ;.      if( !rea
2510: 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41  lnum && sqlite3A
2520: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
2530: 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20  value) ){.      
2540: 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61    pRec->u.i = va
2550: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lue;.        Mem
2560: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2570: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
2580: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2590: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
25a0: 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20  ealify(pRec);.  
25b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
25c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
25d0: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
25e0: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
25f0: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
2600: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
2610: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
2620: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2630: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2640: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2650: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2660: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2670: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2680: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2690: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
26a0: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
26b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
26c0: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
26d0: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
26e0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
26f0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
2700: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
2710: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
2720: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2730: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2740: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2750: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2760: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2770: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2780: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2790: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
27a0: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
27b0: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
27c0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
27d0: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
27e0: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
27f0: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
2800: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
2810: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
2820: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2830: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2840: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2850: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2860: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2870: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2880: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2890: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
28a0: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
28b0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
28c0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
28d0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
28e0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
28f0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
2900: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
2910: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
2920: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2930: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2940: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2950: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2960: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2970: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2980: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2990: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
29a0: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
29b0: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
29c0: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
29d0: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
29e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29f0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
2a00: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
2a10: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2a20: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2a30: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
2a40: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
2a50: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
2a60: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
2a70: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
2a80: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
2a90: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2aa0: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2ab0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2ac0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2ad0: 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  );.    applyNume
2ae0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
2af0: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
2b00: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
2b10: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
2b20: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2b30: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2b40: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2b50: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
2b60: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
2b70: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
2b80: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2b90: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2ba0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2bb0: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2bc0: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2bd0: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2be0: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2bf0: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2c00: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2c10: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2c20: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2c30: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
2c40: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
2c50: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
2c60: 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ument..**.** Thi
2c70: 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45  s is an EXPERIME
2c80: 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20  NTAL api and is 
2c90: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
2ca0: 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f  e or removal..*/
2cb0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2cc0: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2cd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2ce0: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  Val){.  Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2d10: 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20  finity(pMem);.  
2d20: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d  storeTypeInfo(pM
2d30: 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  em, 0);.  return
2d40: 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a   pMem->type;.}..
2d50: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d60: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d70: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d80: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2d90: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2da0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2db0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dc0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2dd0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2de0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2df0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e00: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e10: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e20: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e30: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e40: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2e50: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2e60: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2e70: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2e80: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2e90: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2ea0: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2eb0: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2ec0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2ed0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2ee0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2ef0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2f00: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2f10: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2f20: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2f30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2f40: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2f50: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2f60: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2f70: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2f80: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2f90: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2fa0: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2fb0: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2fc0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2fd0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fe0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2ff0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3000: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3010: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3020: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3030: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3040: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3050: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3060: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3070: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
3080: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3090: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
30a0: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
30b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30c0: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
30d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
30e0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
30f0: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
3100: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
3110: 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sr);.    sqlite3
3120: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3130: 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d  Csr, "%d[", pMem
3140: 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  ->n);.    zCsr +
3150: 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29 3b 0a  = strlen(zCsr);.
3160: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3170: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3180: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
3190: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
31a0: 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20  , zCsr, "%02X", 
31b0: 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d  ((int)pMem->z[i]
31c0: 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20   & 0xFF));.     
31d0: 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28   zCsr += strlen(
31e0: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
31f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3200: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3210: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3220: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3230: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3240: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3250: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3260: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3270: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3280: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3290: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
32a0: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
32b0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
32c0: 74 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20  trlen(zCsr);.   
32d0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
32e0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
32f0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3300: 20 7a 43 73 72 2c 22 2b 25 6c 6c 64 7a 22 2c 70   zCsr,"+%lldz",p
3310: 4d 65 6d 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 20  Mem->u.i);.     
3320: 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28   zCsr += strlen(
3330: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3340: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3350: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3360: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3370: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3380: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
3390: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33a0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
33b0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
33c0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33d0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
33e0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
33f0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3400: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3410: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3420: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3430: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3440: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3450: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3460: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3470: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3480: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3490: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
34a0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
34b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
34c0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
34d0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
34e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
34f0: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3500: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3510: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 74 72 6c  );.    k += strl
3520: 65 6e 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  en(&zBuf[k]);.  
3530: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3540: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3550: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3560: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3570: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3580: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3590: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
35a0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
35b0: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
35c0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
35d0: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
35e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35f0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3600: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3610: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3620: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3630: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3640: 2b 3d 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b  += strlen(&zBuf[
3650: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3660: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3670: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3680: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3690: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
36a0: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
36b0: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
36c0: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
36d0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
36e0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
36f0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
3700: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3710: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
3720: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3730: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3740: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3750: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3760: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3770: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3780: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3790: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
37a0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
37b0: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
37c0: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
37d0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
37e0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
37f0: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
3800: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3810: 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 20   r:%g", p->r);. 
3820: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
3830: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
3840: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3850: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
3860: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
3870: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
3880: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
3890: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
38a0: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
38b0: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
38c0: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
38d0: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
38e0: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
38f0: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3900: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
3910: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
3920: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
3930: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3940: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
3950: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3960: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
3970: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3980: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
3990: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
39a0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
39b0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
39c0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
39d0: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
39e0: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
39f0: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
3a00: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
3a10: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
3a20: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
3a30: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
3a40: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
3a50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3a60: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3a70: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3a80: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3a90: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3aa0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3ab0: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3ac0: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3ad0: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3ae0: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3af0: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3b00: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3b10: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3b20: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3b30: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3b40: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3b50: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3b60: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3b70: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3b80: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3b90: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3ba0: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3bb0: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3bc0: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3bd0: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3be0: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3bf0: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3c00: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3c10: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3c20: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3c30: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3c40: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3c50: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3c60: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3c70: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3c80: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3c90: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3ca0: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3cb0: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3cc0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3cd0: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3ce0: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3cf0: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3d00: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3d10: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3d20: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3d30: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3d40: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3d50: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3d60: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3d70: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3d80: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3d90: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3da0: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3db0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3dc0: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3dd0: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3de0: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3df0: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3e00: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3e10: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3e20: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3e30: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3e40: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3e50: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3e60: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3e70: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3e80: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3e90: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3ea0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
3eb0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
3ec0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
3ed0: 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20   as we can then 
3ee0: 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71  return..**.** sq
3ef0: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61  lite3VdbeMakeRea
3f00: 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c  dy() must be cal
3f10: 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73 20  led before this 
3f20: 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
3f30: 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65   to.** close the
3f40: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20   program with a 
3f50: 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e  final OP_Halt an
3f60: 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65 20  d to set up the 
3f70: 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64  callbacks.** and
3f80: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
3f90: 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a  ge pointer..**.*
3fa0: 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77  * Whenever a row
3fb0: 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61 20   or result data 
3fc0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68  is available, th
3fd0: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
3fe0: 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65  either.** invoke
3ff0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c   the result call
4000: 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69  back (if there i
4010: 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e  s one) or return
4020: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4030: 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  ROW..**.** If an
4040: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
4050: 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65   to open a locke
4060: 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  d database, then
4070: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
4080: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76   will either inv
4090: 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61 6c  oke the busy cal
40a0: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
40b0: 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69  is one) or it wi
40c0: 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c  ll.** return SQL
40d0: 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20  ITE_BUSY..**.** 
40e0: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
40f0: 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  rs, an error mes
4100: 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e 20  sage is written 
4110: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
4120: 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ed.** from sqlit
4130: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  e3_malloc() and 
4140: 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61  p->zErrMsg is ma
4150: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  de to point to t
4160: 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54  hat memory..** T
4170: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  he error code is
4180: 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63   stored in p->rc
4190: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
41a0: 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
41b0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  _ERROR..**.** If
41c0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76   the callback ev
41d0: 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  er returns non-z
41e0: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ero, then the pr
41f0: 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69  ogram exits.** i
4200: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65  mmediately.  The
4210: 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72  re will be no er
4220: 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74 20  ror message but 
4230: 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20  the p->rc field 
4240: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c  is.** set to SQL
4250: 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68  ITE_ABORT and th
4260: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
4270: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
4280: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d  ROR..**.** A mem
4290: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65  ory allocation e
42a0: 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72  rror causes p->r
42b0: 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53  c to be set to S
42c0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20  QLITE_NOMEM and 
42d0: 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20  this.** routine 
42e0: 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  to return SQLITE
42f0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74  _ERROR..**.** Ot
4300: 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73  her fatal errors
4310: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4320: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65  RROR..**.** Afte
4330: 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68  r this routine h
4340: 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c  as finished, sql
4350: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
4360: 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  () should be.** 
4370: 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70  used to clean up
4380: 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20 77   the mess that w
4390: 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a  as left behind..
43a0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
43b0: 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a  beExec(.  Vdbe *
43c0: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
43d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
43e0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3b   */.){.  int pc;
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
4410: 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  am counter */.  
4420: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
4430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
4440: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
4450: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
4460: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
4470: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
4480: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
4490: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
44a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
44b0: 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  se */.  u8 encod
44c0: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
44d0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
44e0: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
44f0: 20 4d 65 6d 20 2a 70 49 6e 31 2c 20 2a 70 49 6e   Mem *pIn1, *pIn
4500: 32 2c 20 2a 70 49 6e 33 3b 20 20 20 2f 2a 20 49  2, *pIn3;   /* I
4510: 6e 70 75 74 20 6f 70 65 72 61 6e 64 73 20 2a 2f  nput operands */
4520: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 20 20 20  .  Mem *pOut;   
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4540: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4550: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4560: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4570: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4580: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
4590: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
45a0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
45b0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
45c0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
45d0: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
45e0: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
45f0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4600: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4610: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4620: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4630: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4640: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4650: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4670: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4680: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4690: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
46a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
46b0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
46c0: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
46d0: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
46e0: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
46f0: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
4700: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
4710: 64 69 66 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  dif.  UnpackedRe
4720: 63 6f 72 64 20 61 54 65 6d 70 52 65 63 5b 31 36  cord aTempRec[16
4730: 5d 3b 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68  ]; /* Space to h
4740: 6f 6c 64 20 61 20 74 72 61 6e 73 69 65 6e 74 20  old a transient 
4750: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
4760: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
4770: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
4780: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
4790: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
47a0: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61  fies this */.  a
47b0: 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63  ssert( db->magic
47c0: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
47d0: 55 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  USY );.  sqlite3
47e0: 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 45  BtreeMutexArrayE
47f0: 6e 74 65 72 28 26 70 2d 3e 61 4d 75 74 65 78 29  nter(&p->aMutex)
4800: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4810: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4820: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4830: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4840: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4850: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4860: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4870: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4880: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4890: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
48a0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
48b0: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
48c0: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
48d0: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
48e0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
48f0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4900: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4910: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4920: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4930: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4940: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4950: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4960: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4970: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
4980: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
4990: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
49a0: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
49b0: 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70 2d  c==0 .   && ((p-
49c0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
49d0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29  ITE_VdbeListing)
49e0: 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28 64   || fileExists(d
49f0: 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69 6e  b, "vdbe_explain
4a00: 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  ")).  ){.    int
4a10: 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   i;.    printf("
4a20: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4a30: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73  ting:\n");.    s
4a40: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4a50: 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69  ql(p);.    for(i
4a60: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4a70: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
4a80: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4a90: 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b  out, i, &p->aOp[
4aa0: 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  i]);.    }.  }. 
4ab0: 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28   if( fileExists(
4ac0: 64 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22  db, "vdbe_trace"
4ad0: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63  ) ){.    p->trac
4ae0: 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a  e = stdout;.  }.
4af0: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4b00: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4b10: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4b20: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4b30: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4b40: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4b50: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4b60: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4b70: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4b80: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4b90: 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50  ROFILE.    origP
4ba0: 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72  c = pc;.    star
4bb0: 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  t = sqlite3Hwtim
4bc0: 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  e();.#endif.    
4bd0: 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63  pOp = &p->aOp[pc
4be0: 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  ];..    /* Only 
4bf0: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4c00: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4c10: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4c20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4c30: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
4c40: 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
4c50: 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pc==0 ){.    
4c60: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4c70: 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65   Execution Trace
4c80: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73  :\n");.        s
4c90: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ca0: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4cb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4cc0: 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65  PrintOp(p->trace
4cd0: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
4ce0: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  }.    if( p->tra
4cf0: 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20 29  ce==0 && pc==0 )
4d00: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
4d10: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4d20: 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66 69  ();.      if( fi
4d30: 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76 64  leExists(db, "vd
4d40: 62 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29 7b  be_sqltrace") ){
4d50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4d60: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4d70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
4d80: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
4d90: 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23  alloc();.    }.#
4da0: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
4db0: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
4dc0: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
4dd0: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
4de0: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
4df0: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
4e00: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
4e10: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
4e20: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
4e30: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
4e40: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
4e50: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
4e60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
4e70: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
4e80: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
4e90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4ea0: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
4eb0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4ec0: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
4ed0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  .    }.#endif..#
4ee0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4ef0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4f00: 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c  BACK.    /* Call
4f10: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
4f20: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
4f30: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
4f40: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
4f50: 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42  er.    ** of VDB
4f60: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
4f70: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
4f80: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
4f90: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a  cation of.    **
4fa0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4fb0: 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74  () or since last
4fc0: 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65   time the progre
4fd0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  ss callback was 
4fe0: 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20  called)..    ** 
4ff0: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
5000: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
5010: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
5020: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5030: 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20  ine with.    ** 
5040: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
5050: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20  LITE_ABORT..    
5060: 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  */.    if( db->x
5070: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
5080: 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72    if( db->nProgr
5090: 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73  essOps==nProgres
50a0: 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20  sOps ){.        
50b0: 69 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20  int prc;.       
50c0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
50d0: 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
50e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
50f0: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70 72  suse;.        pr
5100: 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  c =db->xProgress
5110: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
5120: 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
5130: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
5140: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
5150: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
5160: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21          if( prc!
5170: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
5180: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
5190: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20  RRUPT;.         
51a0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
51b0: 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d  _halt;.        }
51c0: 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65  .        nProgre
51d0: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
51e0: 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65   }.      nProgre
51f0: 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ssOps++;.    }.#
5200: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f  endif..    /* Do
5210: 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72   common setup pr
5220: 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e 79  ocessing for any
5230: 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73 20   opcode that is 
5240: 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69  marked.    ** wi
5250: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
5260: 72 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20 53  release" tag.  S
5270: 75 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76 65  uch opcodes have
5280: 20 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a   a single.    **
5290: 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69 73   output which is
52a0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
52b0: 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e 20  e P2 parameter. 
52c0: 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72   The P2 register
52d0: 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74 69  .    ** is initi
52e0: 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c  alized to a NULL
52f0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50  ..    */.    opP
5300: 72 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64 65  roperty = opcode
5310: 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70  Property[pOp->op
5320: 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20 28  code];.    if( (
5330: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5340: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5350: 53 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  SE)!=0 ){.      
5360: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5370: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5380: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
5390: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  Mem );.      pOu
53a0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
53b0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c  ->p2];.      sql
53c0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
53d0: 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29  seExternal(pOut)
53e0: 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
53f0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
5400: 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20      }else. .    
5410: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
5420: 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d  up for opcodes m
5430: 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f  arked with one o
5440: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
5450: 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69      ** combinati
5460: 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65  ons of propertie
5470: 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
5480: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20             in1. 
5490: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
54a0: 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20  in1 in2.    **  
54b0: 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32           in1 in2
54c0: 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20   out3.    **    
54d0: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20         in1 in3. 
54e0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72     **.    ** Var
54f0: 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e  iables pIn1, pIn
5500: 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20  2, and pIn3 are 
5510: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
5520: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
5530: 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f   ** registers fo
5540: 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61  r inputs.  Varia
5550: 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20  ble pOut points 
5560: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  to the output re
5570: 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20  gister..    */. 
5580: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5590: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
55a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
55b0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
55c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
55d0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
55e0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20  );.      pIn1 = 
55f0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
5600: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5610: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5620: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66   pIn1);.      if
5630: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5640: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5650: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5660: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5670: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5680: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5690: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d  ;.        pIn2 =
56a0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
56b0: 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  2];.        REGI
56c0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
56d0: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  p2, pIn2);.     
56e0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
56f0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
5700: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5710: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5720: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  >0 );.          
5730: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5740: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5750: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d        pOut = &p-
5760: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
5770: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5780: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5790: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
57a0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
57b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
57c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
57d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
57e0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
57f0: 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65    pIn3 = &p->aMe
5800: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33  CE(pOp->p3, pIn3
5830: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5840: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5850: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
5860: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5870: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5880: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5890: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
58a0: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20  m );.      pIn2 
58b0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
58c0: 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p2];.      REGIS
58d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
58e0: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  2, pIn2);.    }e
58f0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5900: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5910: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5920: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5930: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5940: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5950: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   );.      pIn3 =
5960: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5970: 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  3];.      REGIST
5980: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5990: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a  , pIn3);.    }..
59a0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
59b0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
59c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5a10: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5a20: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5a30: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5a40: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5a50: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5a60: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5a70: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5a80: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5a90: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5aa0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5ab0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5ac0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5ad0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5ae0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5af0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5b00: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5b10: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5b20: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5b30: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5b40: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5b50: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5b60: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5b70: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5b80: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5b90: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5ba0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5bb0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5bc0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5bd0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5be0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5bf0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5c00: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5c10: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5c20: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5c30: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5c40: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5c50: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5c60: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5c70: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5c80: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5c90: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5ca0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5cb0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5cc0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5cd0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ce0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5cf0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5d00: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5d10: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5d20: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5d30: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5d40: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5d50: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5d60: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5d70: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5d80: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5d90: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5da0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5db0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5dc0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5dd0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5de0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5df0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5e00: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5e10: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5e20: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5e30: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5e40: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5e50: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5e60: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5e70: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5e80: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5e90: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5ea0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5eb0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5ec0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5ed0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5ee0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5ef0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5f00: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5f10: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5f20: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5f30: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5f40: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5f50: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5f60: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5f70: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5f80: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5f90: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5fa0: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5fb0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5fc0: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5fd0: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5fe0: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5ff0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
6000: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6010: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6020: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6030: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6040: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6050: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6060: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6070: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6080: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
6090: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
60a0: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
60b0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
60c0: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
60d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6120: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6130: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6140: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6150: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6160: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6170: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6180: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6190: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
61a0: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
61b0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
61c0: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
61d0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
61f0: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6200: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6210: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6220: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6230: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6240: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6250: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6260: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
6270: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
6280: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
6290: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
62a0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
62c0: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
62d0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
62e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
62f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
6300: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
6310: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6320: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6330: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6340: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6350: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6360: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6370: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6380: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6390: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
63a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
63b0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
63c0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
63d0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
63e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
63f0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6400: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6410: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6420: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6430: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
6440: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6450: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6460: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62  = pIn1->u.i;.  b
6470: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6480: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20  de:  Yield P1 * 
6490: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
64a0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
64b0: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
64c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
64d0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  P1..*/.case OP_Y
64e0: 69 65 6c 64 3a 20 7b 0a 20 20 69 6e 74 20 70 63  ield: {.  int pc
64f0: 44 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28 20  Dest;.  assert( 
6500: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
6510: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
6520: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e  p->nMem );.  pIn
6530: 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  1 = &p->aMem[pOp
6540: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6550: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6560: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6570: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6580: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
6590: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
65a0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
65b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
65c0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
65d0: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
65e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
65f0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
6600: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6610: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
6620: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
6630: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
6640: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
6650: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
6660: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
6670: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
6680: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
6690: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
66a0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
66b0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
66c0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
66d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
66e0: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
66f0: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
6700: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
6710: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
6720: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
6730: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
6740: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
6750: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
6760: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
6770: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
6780: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
6790: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
67a0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
67b0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
67c0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
67d0: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
67e0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
67f0: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
6800: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
6810: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
6820: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
6830: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
6840: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
6850: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
6860: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
6870: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
6880: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
6890: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
68a0: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
68b0: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
68c0: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
68d0: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
68e0: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
68f0: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
6900: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
6910: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
6920: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
6930: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
6940: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e  OP_Halt: {.  p->
6950: 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  rc = pOp->p1;.  
6960: 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d  p->pc = pc;.  p-
6970: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70  >errorAction = p
6980: 4f 70 2d 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f  Op->p2;.  if( pO
6990: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73  p->p4.z ){.    s
69a0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
69b0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
69c0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
69d0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
69e0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
69f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
6a00: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
6a10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
6a20: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6a30: 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e  _BUSY ){.    p->
6a40: 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
6a50: 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _BUSY;.  }else{.
6a60: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
6a70: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
6a80: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
6a90: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
6aa0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
6ab0: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
6ac0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
6ad0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
6ae0: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
6af0: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
6b00: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
6b10: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
6b20: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
6b30: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
6b40: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
6b50: 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  t;.  pOut->u.i =
6b60: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
6b70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b80: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
6b90: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
6ba0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
6bb0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
6bc0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
6bd0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
6be0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
6bf0: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
6c00: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
6c10: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
6c20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
6c30: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
6c40: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
6c50: 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  nt;.  pOut->u.i 
6c60: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
6c70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6c80: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
6c90: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
6ca0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
6cb0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
6cc0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
6cd0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
6ce0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
6cf0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
6d00: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
6d10: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
6d20: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
6d30: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
6d40: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6d50: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
6d60: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
6d70: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
6d80: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
6d90: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
6da0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6db0: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
6dc0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
6dd0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
6de0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
6df0: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
6e00: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
6e10: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
6e20: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
6e30: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
6e40: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
6e50: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
6e60: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
6e70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
6e80: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
6e90: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
6ea0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
6eb0: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
6ec0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
6ed0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74  ;.  pOp->p1 = st
6ee0: 72 6c 65 6e 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  rlen(pOp->p4.z);
6ef0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
6f00: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
6f10: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
6f20: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 73  TE_UTF8 ){.    s
6f30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
6f40: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
6f50: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
6f60: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
6f70: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 53 51  TIC);.    if( SQ
6f80: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
6f90: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
6fa0: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
6fb0: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
6fc0: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
6fd0: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
6fe0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
6ff0: 28 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f  (pOut) ) goto no
7000: 5f 6d 65 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _mem;.    pOut->
7010: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7020: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
7030: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7040: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
7050: 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28  MEM_Dyn;.    if(
7060: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
7070: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
7080: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
7090: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
70a0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
70b0: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
70c0: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
70d0: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
70e0: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
70f0: 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  >n;.    if( pOp-
7100: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
7110: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
7120: 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
7130: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
7140: 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  .    UPDATE_MAX_
7150: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
7160: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7170: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
7180: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
7190: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
71a0: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
71b0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f  too_big;.  }.  /
71c0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
71d0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
71e0: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
71f0: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
7200: 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20  ring P1 P2 * P4 
7210: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  *.**.** The stri
7220: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
7230: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
7240: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
7250: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7260: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
7270: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7280: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7290: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
72a0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  .z!=0 );.  pOut-
72b0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
72c0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
72d0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
72e0: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
72f0: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
7300: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7310: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7320: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7330: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7340: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
7350: 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  ll * P2 * * *.**
7360: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
7370: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7380: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  2..*/.case OP_Nu
7390: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
73a0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
73b0: 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  se */.  break;.}
73c0: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  .../* Opcode: Bl
73d0: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a  ob P1 P2 * P4.**
73e0: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
73f0: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
7400: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
7410: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
7420: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
7430: 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  2. This instruct
7440: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64  ion is not coded
7450: 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20   directly.** by 
7460: 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e  the compiler. In
7470: 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69  stead, the compi
7480: 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63 69 66  ler layer specif
7490: 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78  ies.** an OP_Hex
74a0: 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74  Blob opcode, wit
74b0: 68 20 74 68 65 20 68 65 78 20 73 74 72 69 6e 67  h the hex string
74c0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
74d0: 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61  of.** the blob a
74e0: 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64  s P4. This opcod
74f0: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
7500: 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a   to an OP_Blob.*
7510: 2a 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  * the first time
7520: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 2e   it is executed.
7530: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
7540: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
7550: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7560: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7570: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
7580: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
7590: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
75a0: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
75b0: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
75c0: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
75d0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
75e0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
75f0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
7600: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7610: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
7620: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7630: 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 76  * The value of v
7640: 61 72 69 61 62 6c 65 20 50 31 20 69 73 20 77 72  ariable P1 is wr
7650: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
7660: 74 65 72 20 50 32 2e 20 41 20 76 61 72 69 61 62  ter P2. A variab
7670: 6c 65 20 69 73 0a 2a 2a 20 61 6e 20 75 6e 6b 6e  le is.** an unkn
7680: 6f 77 6e 20 69 6e 20 74 68 65 20 6f 72 69 67 69  own in the origi
7690: 6e 61 6c 20 53 51 4c 20 73 74 72 69 6e 67 20 61  nal SQL string a
76a0: 73 20 68 61 6e 64 65 64 20 74 6f 20 73 71 6c 69  s handed to sqli
76b0: 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 2e 0a 2a  te3_compile()..*
76c0: 2a 20 41 6e 79 20 6f 63 63 75 72 72 65 6e 63 65  * Any occurrence
76d0: 20 6f 66 20 74 68 65 20 27 3f 27 20 63 68 61 72   of the '?' char
76e0: 61 63 74 65 72 20 69 6e 20 74 68 65 20 6f 72 69  acter in the ori
76f0: 67 69 6e 61 6c 20 53 51 4c 20 69 73 20 63 6f 6e  ginal SQL is con
7700: 73 69 64 65 72 65 64 0a 2a 2a 20 61 20 76 61 72  sidered.** a var
7710: 69 61 62 6c 65 2e 20 20 56 61 72 69 61 62 6c 65  iable.  Variable
7720: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 72  s in the SQL str
7730: 69 6e 67 20 61 72 65 20 6e 75 6d 62 65 72 20 66  ing are number f
7740: 72 6f 6d 20 6c 65 66 74 20 74 6f 0a 2a 2a 20 72  rom left to.** r
7750: 69 67 68 74 20 62 65 67 69 6e 6e 69 6e 67 20 77  ight beginning w
7760: 69 74 68 20 31 2e 20 20 54 68 65 20 76 61 6c 75  ith 1.  The valu
7770: 65 73 20 6f 66 20 76 61 72 69 61 62 6c 65 73 20  es of variables 
7780: 61 72 65 20 73 65 74 20 75 73 69 6e 67 20 74 68  are set using th
7790: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e  e.** sqlite3_bin
77a0: 64 28 29 20 41 50 49 2e 0a 2a 2f 0a 63 61 73 65  d() API..*/.case
77b0: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
77c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
77d0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77e0: 20 20 69 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e 70    int j = pOp->p
77f0: 31 20 2d 20 31 3b 0a 20 20 4d 65 6d 20 2a 70 56  1 - 1;.  Mem *pV
7800: 61 72 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3e  ar;.  assert( j>
7810: 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e 56 61 72 20  =0 && j<p->nVar 
7820: 29 3b 0a 0a 20 20 70 56 61 72 20 3d 20 26 70 2d  );..  pVar = &p-
7830: 3e 61 56 61 72 5b 6a 5d 3b 0a 20 20 69 66 28 20  >aVar[j];.  if( 
7840: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
7850: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
7860: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
7870: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
7880: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
7890: 70 4f 75 74 2c 20 26 70 2d 3e 61 56 61 72 5b 6a  pOut, &p->aVar[j
78a0: 5d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  ], MEM_Static);.
78b0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
78c0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
78d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
78e0: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
78f0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  3 * *.**.** Move
7900: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
7910: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
7920: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
7930: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
7940: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
7950: 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61  rs P1..P1+P1-1 a
7960: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
7970: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
7980: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
7990: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
79a0: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
79b0: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
79c0: 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73   overlap..*/.cas
79d0: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63  e OP_Move: {.  c
79e0: 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  har *zMalloc;.  
79f0: 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  int n = pOp->p3;
7a00: 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d  .  int p1 = pOp-
7a10: 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20  >p1;.  int p2 = 
7a20: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
7a30: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
7a40: 72 74 28 20 70 31 3e 30 20 29 3b 0a 20 20 61 73  rt( p1>0 );.  as
7a50: 73 65 72 74 28 20 70 31 2b 6e 3c 70 2d 3e 6e 4d  sert( p1+n<p->nM
7a60: 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  em );.  pIn1 = &
7a70: 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 61  p->aMem[p1];.  a
7a80: 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
7a90: 20 61 73 73 65 72 74 28 20 70 32 2b 6e 3c 70 2d   assert( p2+n<p-
7aa0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
7ab0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a  = &p->aMem[p2];.
7ac0: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d    assert( p1+n<=
7ad0: 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29  p2 || p2+n<=p1 )
7ae0: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
7af0: 7b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20  {.    zMalloc = 
7b00: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  pOut->zMalloc;. 
7b10: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
7b20: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
7b30: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
7b40: 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49  t, pIn1);.    pI
7b50: 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d  n1->zMalloc = zM
7b60: 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53  alloc;.    REGIS
7b70: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
7b80: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
7b90: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
7ba0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
7bb0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50  * Opcode: Copy P
7bc0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
7bd0: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
7be0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
7bf0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
7c00: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
7c10: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
7c20: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
7c30: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
7c40: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
7c50: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
7c60: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
7c70: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
7c80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
7c90: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
7ca0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
7cb0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
7cc0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
7cd0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
7ce0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
7cf0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
7d00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
7d10: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
7d20: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
7d30: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
7d40: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
7d50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
7d60: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
7d70: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
7d80: 3b 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ;.  Deephemerali
7d90: 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49  ze(pOut);.  REGI
7da0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7db0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
7dc0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7dd0: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
7de0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
7df0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
7e00: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
7e10: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7e20: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
7e30: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
7e40: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
7e50: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
7e60: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
7e70: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
7e80: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
7e90: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
7ea0: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
7eb0: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
7ec0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
7ed0: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
7ee0: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
7ef0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
7f00: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
7f10: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
7f20: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
7f30: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
7f40: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
7f50: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
7f60: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
7f70: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
7f80: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
7f90: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
7fa0: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
7fb0: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
7fc0: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 0a  ase OP_SCopy: {.
7fd0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7fe0: 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  1>0 );.  assert(
7ff0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65   pOp->p1<=p->nMe
8000: 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70  m );.  pIn1 = &p
8010: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
8020: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8030: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
8040: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8050: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
8060: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
8070: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
8080: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
8090: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
80a0: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
80b0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
80c0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
80d0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
80e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
80f0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
8100: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8110: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
8120: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8130: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
8140: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
8150: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
8160: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
8170: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
8180: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
8190: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
81a0: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
81b0: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
81c0: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
81d0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
81e0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
81f0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
8200: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
8210: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
8220: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8230: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
8240: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
8250: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
8260: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
8270: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
8280: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
8290: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
82a0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
82b0: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
82c0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a 20 20 2f 2a  p->nMem );..  /*
82d0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
82e0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
82f0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
8300: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
8310: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
8320: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
8330: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
8340: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
8350: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
8360: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
8370: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
8380: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
8390: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
83a0: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
83b0: 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e   as side effect.
83c0: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
83d0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
83e0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
83f0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
8400: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
8410: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8420: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
8430: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72  em[i]);.    stor
8440: 65 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b  eTypeInfo(&pMem[
8450: 69 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  i], encoding);. 
8460: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8470: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
8480: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
8490: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
84a0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
84b0: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
84c0: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
84d0: 20 70 2d 3e 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b   p->nCallback++;
84e0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
84f0: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8500: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8510: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8520: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8530: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8540: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8550: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8560: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8570: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8580: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
8590: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
85a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
85b0: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
85c0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
85d0: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
85e0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
85f0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8600: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8610: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8620: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8630: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8640: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8650: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8660: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8670: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8680: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
8690: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
86a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
86b0: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
86c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
86d0: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
86e0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
86f0: 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  yte;..  assert( 
8700: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
8710: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
8720: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
8730: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
8740: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8750: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
8760: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
8770: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
8780: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
8790: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
87a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
87b0: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
87c0: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
87d0: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
87e0: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
87f0: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
8800: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8810: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8820: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8830: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
8840: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
8850: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
8860: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
8870: 2c 20 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  , nByte+2, pOut=
8880: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
8890: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
88a0: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
88b0: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
88c0: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
88d0: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
88e0: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
88f0: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
8900: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
8910: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20  Out->z[nByte] = 
8920: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
8930: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
8940: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
8950: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
8960: 3d 20 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  = nByte;.  pOut-
8970: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
8980: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
8990: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
89a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
89b0: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
89c0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
89d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
89e0: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
89f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8a00: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
8a10: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8a20: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
8a30: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
8a40: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8a50: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
8a60: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
8a70: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
8a80: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
8a90: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
8aa0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
8ab0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
8ac0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
8ad0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8ae0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8af0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
8b00: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
8b10: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
8b20: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
8b30: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
8b40: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  * *.**.** Subtra
8b50: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
8b60: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
8b70: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8b80: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
8b90: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8ba0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8bb0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
8bc0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
8bd0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
8be0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
8bf0: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
8c00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  * *.**.** Divide
8c10: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8c20: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
8c30: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8c40: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
8c50: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
8c60: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
8c70: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
8c80: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 69 73  egister P2.** is
8c90: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
8ca0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
8cb0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
8cc0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
8cd0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
8ce0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
8cf0: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
8d00: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75   * *.**.** Compu
8d10: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
8d20: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64   after integer d
8d30: 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76  ivision of the v
8d40: 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  alue in.** regis
8d50: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
8d60: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8d70: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
8d80: 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a   result in P3. .
8d90: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
8da0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69  in register P2 i
8db0: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
8dc0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
8dd0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
8de0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8df0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
8e00: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8e20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
8e30: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
8e40: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
8e50: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
8e60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8e70: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
8e80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
8e90: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
8ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8eb0: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
8ec0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
8ed0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ef0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
8f00: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
8f10: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
8f20: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
8f30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8f40: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
8f50: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
8f60: 66 6c 61 67 73 3b 0a 20 20 61 70 70 6c 79 4e 75  flags;.  applyNu
8f70: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
8f80: 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  n1);.  applyNume
8f90: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 32  ricAffinity(pIn2
8fa0: 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  );.  flags = pIn
8fb0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
8fc0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
8fd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
8fe0: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
8ff0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9000: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9010: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9020: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9030: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9040: 20 20 69 36 34 20 61 2c 20 62 3b 0a 20 20 20 20    i64 a, b;.    
9050: 61 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  a = pIn1->u.i;. 
9060: 20 20 20 62 20 3d 20 70 49 6e 32 2d 3e 75 2e 69     b = pIn2->u.i
9070: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
9080: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
9090: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
90a0: 20 20 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20          b += a; 
90b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
90c0: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
90d0: 61 63 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20  act:    b -= a; 
90e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
90f0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
9100: 70 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20  ply:    b *= a; 
9110: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9120: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
9130: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
9140: 20 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69   a==0 ) goto ari
9150: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9160: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
9170: 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20  /* Dividing the 
9180: 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
9190: 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74   negative 64-bit
91a0: 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29   integer (1<<63)
91b0: 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   by .        ** 
91c0: 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e  -1 returns an in
91d0: 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20  teger too large 
91e0: 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34  to store in a 64
91f0: 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20  -bit data-type. 
9200: 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f  On.        ** so
9210: 6d 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73  me architectures
9220: 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72  , the value over
9230: 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29  flows to (1<<63)
9240: 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20  . On others,.   
9250: 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45       ** a SIGFPE
9260: 20 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20   is issued. The 
9270: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
9280: 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74  ent normalizes t
9290: 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62  his.        ** b
92a0: 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20  ehavior so that 
92b0: 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65  all architecture
92c0: 73 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69  s behave as if i
92d0: 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20  nteger .        
92e0: 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75  ** overflow occu
92f0: 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  rred..        */
9300: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d  .        if( a==
9310: 2d 31 20 26 26 20 62 3d 3d 53 4d 41 4c 4c 45 53  -1 && b==SMALLES
9320: 54 5f 49 4e 54 36 34 20 29 20 61 20 3d 20 31 3b  T_INT64 ) a = 1;
9330: 0a 20 20 20 20 20 20 20 20 62 20 2f 3d 20 61 3b  .        b /= a;
9340: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9350: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
9360: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
9370: 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f   if( a==0 ) goto
9380: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9390: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
93a0: 20 20 20 20 69 66 28 20 61 3d 3d 2d 31 20 29 20      if( a==-1 ) 
93b0: 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  a = 1;.        b
93c0: 20 25 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62   %= a;.        b
93d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
93e0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
93f0: 69 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65  i = b;.    MemSe
9400: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9410: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
9420: 65 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 61 2c  e{.    double a,
9430: 20 62 3b 0a 20 20 20 20 61 20 3d 20 73 71 6c 69   b;.    a = sqli
9440: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
9450: 28 70 49 6e 31 29 3b 0a 20 20 20 20 62 20 3d 20  (pIn1);.    b = 
9460: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
9470: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
9480: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
9490: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
94a0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
94b0: 20 20 62 20 2b 3d 20 61 3b 20 20 20 20 20 20 20    b += a;       
94c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
94d0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
94e0: 20 20 62 20 2d 3d 20 61 3b 20 20 20 20 20 20 20    b -= a;       
94f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9500: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9510: 20 20 62 20 2a 3d 20 61 3b 20 20 20 20 20 20 20    b *= a;       
9520: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9530: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
9540: 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30 2e         if( a==0.
9550: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9560: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9570: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 62 20 2f 3d  ll;.        b /=
9580: 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   a;.        brea
9590: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
95a0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
95b0: 20 20 20 20 69 36 34 20 69 61 20 3d 20 28 69 36      i64 ia = (i6
95c0: 34 29 61 3b 0a 20 20 20 20 20 20 20 20 69 36 34  4)a;.        i64
95d0: 20 69 62 20 3d 20 28 69 36 34 29 62 3b 0a 20 20   ib = (i64)b;.  
95e0: 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d 30 20        if( ia==0 
95f0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9600: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9610: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 61  ;.        if( ia
9620: 3d 3d 2d 31 20 29 20 69 61 20 3d 20 31 3b 0a 20  ==-1 ) ia = 1;. 
9630: 20 20 20 20 20 20 20 62 20 3d 20 69 62 20 25 20         b = ib % 
9640: 69 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ia;.        brea
9650: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9660: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
9670: 49 73 4e 61 4e 28 62 29 20 29 7b 0a 20 20 20 20  IsNaN(b) ){.    
9680: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
9690: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
96a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
96b0: 2d 3e 72 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d  ->r = b;.    Mem
96c0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
96d0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
96e0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
96f0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
9700: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
9710: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
9720: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Out);.    }.  }.
9730: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
9740: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9750: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
9760: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9770: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9780: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
9790: 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  eq * * P4.**.** 
97a0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
97b0: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72  to a CollSeq str
97c0: 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  uct. If the next
97d0: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
97e0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
97f0: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
9800: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
9810: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
9820: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
9830: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
9840: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
9850: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
9860: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
9870: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
9880: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
9890: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
98a0: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
98b0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
98c0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
98d0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
98e0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
98f0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
9900: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
9910: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
9920: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
9930: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
9940: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
9950: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
9960: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
9970: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9980: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
9990: 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Q );.  break;.}.
99a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
99b0: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
99c0: 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65   P5.**.** Invoke
99d0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
99e0: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
99f0: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
9a00: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
9a10: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
9a20: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
9a30: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
9a40: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
9a50: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
9a60: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
9a70: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
9a80: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
9a90: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
9aa0: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
9ab0: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
9ac0: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
9ad0: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
9ae0: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
9af0: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
9b00: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
9b10: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
9b20: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
9b30: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
9b40: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
9b50: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
9b60: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
9b70: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
9b80: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
9b90: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
9ba0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
9bb0: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
9bc0: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
9bd0: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
9be0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
9bf0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
9c00: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
9c10: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
9c20: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
9c30: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
9c40: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
9c50: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
9c60: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
9c70: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
9c80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
9c90: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
9ca0: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
9cb0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
9cc0: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
9cd0: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
9ce0: 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  nt n = pOp->p5;.
9cf0: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
9d00: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
9d10: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
9d20: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
9d30: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
9d40: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e   pOp->p2+n<=p->n
9d50: 4d 65 6d 29 20 29 3b 0a 20 20 61 73 73 65 72 74  Mem) );.  assert
9d60: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
9d70: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
9d80: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
9d90: 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  g = &p->aMem[pOp
9da0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
9db0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
9dc0: 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ++){.    apVal[i
9dd0: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 74  ] = pArg;.    st
9de0: 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 41 72 67  oreTypeInfo(pArg
9df0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
9e00: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9e10: 70 4f 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a  pOp->p2, pArg);.
9e20: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
9e30: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
9e40: 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70  UNCDEF || pOp->p
9e50: 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55  4type==P4_VDBEFU
9e60: 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  NC );.  if( pOp-
9e70: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
9e80: 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70  DEF ){.    ctx.p
9e90: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
9ea0: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56  Func;.    ctx.pV
9eb0: 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d  dbeFunc = 0;.  }
9ec0: 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56  else{.    ctx.pV
9ed0: 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46  dbeFunc = (VdbeF
9ee0: 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64  unc*)pOp->p4.pVd
9ef0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  beFunc;.    ctx.
9f00: 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  pFunc = ctx.pVdb
9f10: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20  eFunc->pFunc;.  
9f20: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
9f30: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
9f40: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
9f50: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
9f60: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e  pOp->p3];.  ctx.
9f70: 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
9f80: 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d  ll;.  ctx.s.db =
9f90: 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65   db;.  ctx.s.xDe
9fa0: 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  l = 0;.  ctx.s.z
9fb0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f  Malloc = 0;..  /
9fc0: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
9fd0: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
9fe0: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
9ff0: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
a000: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
a010: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
a020: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
a030: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
a040: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
a050: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
a060: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
a070: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
a080: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
a090: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
a0a0: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
a0b0: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
a0c0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
a0d0: 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
a0e0: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
a0f0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
a100: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
a110: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
a120: 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
a130: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
a140: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
a150: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a160: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
a170: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
a180: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
a190: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
a1a0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
a1b0: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
a1c0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
a1d0: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a 63  to_misuse;.  (*c
a1e0: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
a1f0: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
a200: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
a210: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
a220: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a230: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
a240: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
a250: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
a260: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a270: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
a280: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
a290: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
a2a0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
a2b0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
a2c0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
a2d0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
a2e0: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
a2f0: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
a300: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
a310: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
a320: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
a330: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
a340: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
a350: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
a360: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
a370: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e  .    **.    ** N
a380: 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52 65  ote: Maybe MemRe
a390: 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20 62  lease() should b
a3a0: 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c 69  e called if sqli
a3b0: 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20 20  te3SafetyOn().  
a3c0: 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f 20    ** fails also 
a3d0: 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74 61  (the if(...) sta
a3e0: 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20 42  tement above). B
a3f0: 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72 65  ut if people are
a400: 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e 67  .    ** misusing
a410: 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68 61   sqlite, they ha
a420: 76 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c 65  ve bigger proble
a430: 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65 64  ms than a leaked
a440: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
a450: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a460: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
a470: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
a480: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
a490: 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61  any auxiliary da
a4a0: 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  ta functions hav
a4b0: 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79  e been called by
a4c0: 20 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74   this user funct
a4d0: 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69  ion,.  ** immedi
a4e0: 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64  ately call the d
a4f0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e  estructor for an
a500: 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c  y non-static val
a510: 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ues..  */.  if( 
a520: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b  ctx.pVdbeFunc ){
a530: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
a540: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74  DeleteAuxData(ct
a550: 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70  x.pVdbeFunc, pOp
a560: 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e  ->p1);.    pOp->
a570: 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63  p4.pVdbeFunc = c
a580: 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  tx.pVdbeFunc;.  
a590: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
a5a0: 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d  P4_VDBEFUNC;.  }
a5b0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
a5c0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
a5d0: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
a5e0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
a5f0: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
a600: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
a610: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
a620: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
a630: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
a640: 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
a650: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
a660: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  or;.  }..  /* Co
a670: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
a680: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
a690: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
a6a0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
a6b0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63  hangeEncoding(&c
a6c0: 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  tx.s, encoding);
a6d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a6e0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78  mMove(pOut, &ctx
a6f0: 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  .s);.  if( sqlit
a700: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
a710: 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  pOut) ){.    got
a720: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
a730: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
a740: 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
a750: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
a760: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
a770: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a780: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
a790: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
a7a0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
a7b0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
a7c0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
a7d0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
a7e0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
a7f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
a800: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
a810: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
a820: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
a830: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
a840: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
a850: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
a860: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
a870: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
a880: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
a890: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
a8a0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
a8b0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
a8c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
a8d0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
a8e0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
a8f0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
a900: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
a910: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
a920: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
a930: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
a940: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
a950: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
a960: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
a970: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
a980: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
a990: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a9a0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a9b0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a9c0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a9d0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a9e0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
a9f0: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
aa00: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
aa10: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
aa20: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
aa30: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
aa40: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
aa50: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
aa60: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
aa70: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
aa80: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
aa90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
aaa0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
aab0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
aac0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
aad0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
aae0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
aaf0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ab00: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
ab10: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
ab20: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ab40: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
ab50: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ab60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
ab70: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
ab80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ab90: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
aba0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
abb0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
abc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
abd0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
abe0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
abf0: 2a 2f 0a 20 20 69 36 34 20 61 2c 20 62 3b 0a 0a  */.  i64 a, b;..
ac00: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
ac10: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
ac20: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
ac30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ac40: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
ac50: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
ac60: 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62    a = sqlite3Vdb
ac70: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
ac80: 0a 20 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64  .  b = sqlite3Vd
ac90: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
aca0: 3b 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  ;.  switch( pOp-
acb0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
acc0: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
acd0: 20 20 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20      a &= b;     
ace0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
acf0: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
ad00: 61 20 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61  a |= b;     brea
ad10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53  k;.    case OP_S
ad20: 68 69 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c  hiftLeft:   a <<
ad30: 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  = b;    break;. 
ad40: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73     default:  ass
ad50: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
ad60: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
ad70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e              a >>
ad90: 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  = b;    break;. 
ada0: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
adb0: 20 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   a;.  MemSetType
adc0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
add0: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
ade0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
adf0: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
ae00: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
ae10: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
ae20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ae30: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
ae40: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
ae50: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
ae60: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
ae70: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
ae80: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
ae90: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
aea0: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
aeb0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
aec0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aed0: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
aee0: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
aef0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
af00: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
af10: 20 46 6f 72 63 65 49 6e 74 20 50 31 20 50 32 20   ForceInt P1 P2 
af20: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  P3 * *.**.** Con
af30: 76 65 72 74 20 76 61 6c 75 65 20 69 6e 20 72 65  vert value in re
af40: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 61  gister P1 into a
af50: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
af60: 68 65 20 76 61 6c 75 65 20 0a 2a 2a 20 69 6e 20  he value .** in 
af70: 50 31 20 69 73 20 6e 6f 74 20 6e 75 6d 65 72 69  P1 is not numeri
af80: 63 20 28 6d 65 61 6e 69 6e 67 20 74 68 61 74 20  c (meaning that 
af90: 69 73 20 69 73 20 61 20 4e 55 4c 4c 20 6f 72 20  is is a NULL or 
afa0: 61 20 73 74 72 69 6e 67 20 74 68 61 74 0a 2a 2a  a string that.**
afb0: 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 6c   does not look l
afc0: 69 6b 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ike an integer o
afd0: 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  r floating point
afe0: 20 6e 75 6d 62 65 72 29 20 74 68 65 6e 0a 2a 2a   number) then.**
aff0: 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66   jump to P2.  If
b000: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31   the value in P1
b010: 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e   is numeric then
b020: 0a 2a 2a 20 63 6f 6e 76 65 72 74 20 69 74 20 69  .** convert it i
b030: 6e 74 6f 20 74 68 65 20 6c 65 61 73 74 20 69 6e  nto the least in
b040: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 67 72  teger that is gr
b050: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
b060: 75 61 6c 20 74 6f 20 69 74 73 0a 2a 2a 20 63 75  ual to its.** cu
b070: 72 72 65 6e 74 20 76 61 6c 75 65 20 69 66 20 50  rrent value if P
b080: 33 3d 3d 30 2c 20 6f 72 20 74 6f 20 74 68 65 20  3==0, or to the 
b090: 6c 65 61 73 74 20 69 6e 74 65 67 65 72 20 74 68  least integer th
b0a0: 61 74 20 69 73 20 73 74 72 69 63 74 6c 79 0a 2a  at is strictly.*
b0b0: 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 69  * greater than i
b0c0: 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
b0d0: 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2f 0a 63 61   if P3==1..*/.ca
b0e0: 73 65 20 4f 50 5f 46 6f 72 63 65 49 6e 74 3a 20  se OP_ForceInt: 
b0f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
b100: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
b110: 36 34 20 76 3b 0a 20 20 61 70 70 6c 79 41 66 66  64 v;.  applyAff
b120: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b130: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
b140: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
b150: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
b160: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
b170: 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  l))==0 ){.    pc
b180: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
b190: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
b1a0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
b1b0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
b1c0: 20 20 76 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 20    v = pIn1->u.i 
b1d0: 2b 20 28 70 4f 70 2d 3e 70 33 21 3d 30 29 3b 0a  + (pOp->p3!=0);.
b1e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
b1f0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
b200: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
b210: 20 20 20 76 20 3d 20 28 73 71 6c 69 74 65 33 5f     v = (sqlite3_
b220: 69 6e 74 36 34 29 70 49 6e 31 2d 3e 72 3b 0a 20  int64)pIn1->r;. 
b230: 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 72 3e 28     if( pIn1->r>(
b240: 64 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b 0a  double)v ) v++;.
b250: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
b260: 26 26 20 70 49 6e 31 2d 3e 72 3d 3d 28 64 6f 75  && pIn1->r==(dou
b270: 62 6c 65 29 76 20 29 20 76 2b 2b 3b 0a 20 20 7d  ble)v ) v++;.  }
b280: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 76  .  pIn1->u.i = v
b290: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
b2a0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
b2b0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b2c0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
b2d0: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
b2e0: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
b2f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b300: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
b310: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
b320: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
b330: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
b340: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
b350: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
b360: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
b370: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
b380: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
b390: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
b3a0: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
b3b0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
b3c0: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
b3d0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
b3e0: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
b3f0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
b400: 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  /.  applyAffinit
b410: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
b420: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
b430: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49  ding);.  if( (pI
b440: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
b450: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  Int)==0 ){.    i
b460: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
b470: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
b480: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
b490: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
b4a0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
b4b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20  }else{.      pc 
b4c0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
b4d0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
b4e0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b4f0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
b500: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
b510: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
b520: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
b530: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
b540: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
b550: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
b560: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
b570: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
b580: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
b590: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
b5a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
b5b0: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
b5c0: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
b5d0: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
b5e0: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
b5f0: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
b600: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
b610: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
b620: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
b630: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
b640: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
b650: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
b660: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
b670: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b690: 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  * in1 */.  if( p
b6a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
b6b0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
b6c0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
b6d0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
b6e0: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
b6f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
b700: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54  T./* Opcode: ToT
b710: 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ext P1 * * * *.*
b720: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
b730: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b740: 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a   P1 to be text..
b750: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b760: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
b770: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
b780: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ng using the.** 
b790: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72  equivalent of pr
b7a0: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
b7b0: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
b7c0: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
b7d0: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
b7e0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
b7f0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
b800: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
b810: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
b820: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
b830: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
b840: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
b870: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
b880: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
b890: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
b8a0: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
b8b0: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
b8c0: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
b8d0: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
b8e0: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
b8f0: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
b900: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
b910: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
b920: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
b930: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
b940: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
b950: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
b960: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
b970: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
b980: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
b990: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
b9a0: 6f 62 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ob);.  UPDATE_MA
b9b0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
b9c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b9d0: 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20   Opcode: ToBlob 
b9e0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b9f0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
ba00: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ba10: 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a  to be a BLOB..**
ba20: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
ba30: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
ba40: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
ba50: 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e   first..** Strin
ba60: 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65  gs are simply re
ba70: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62  interpreted as b
ba80: 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61  lobs with no cha
ba90: 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e  nge.** to the un
baa0: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a  derlying data..*
bab0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
bac0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
bad0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
bae0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
baf0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
bb00: 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  oBlob: {        
bb10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bb20: 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c  e as TK_TO_BLOB,
bb30: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49   in1 */.  if( pI
bb40: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bb50: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
bb60: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
bb70: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
bb80: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
bb90: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
bba0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
bbb0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
bbc0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
bbd0: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
bbe0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
bbf0: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
bc00: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
bc10: 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  lob);.  UPDATE_M
bc20: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
bc30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
bc40: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65  * Opcode: ToNume
bc50: 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ric P1 * * * *.*
bc60: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bc70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bc80: 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69   P1 to be numeri
bc90: 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20  c (either an.** 
bca0: 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f  integer or a flo
bcb0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62  ating-point numb
bcc0: 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76  er.).** If the v
bcd0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
bce0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
bcf0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73  vert it to an us
bd00: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
bd10: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
bd20: 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74  or atof() and st
bd30: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
bd40: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20   conversion .** 
bd50: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
bd60: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
bd70: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
bd80: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
bd90: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
bda0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e  ..*/.case OP_ToN
bdb0: 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20  umeric: {       
bdc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bdd0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45  me as TK_TO_NUME
bde0: 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  RIC, in1 */.  if
bdf0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
be00: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49   (MEM_Null|MEM_I
be10: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
be20: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
be30: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
be40: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
be50: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
be60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
be70: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
be80: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
be90: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
bea0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
beb0: 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67  r P1 be an integ
bec0: 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76  er.  If.** The v
bed0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
bee0: 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c  y a real number,
bef0: 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69   drop its fracti
bf00: 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66  onal part..** If
bf10: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
bf20: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
bf30: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
bf40: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
bf50: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
bf60: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
bf70: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
bf80: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
bf90: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
bfa0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
bfb0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
bfc0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
bfd0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
bfe0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49  ..*/.case OP_ToI
bff0: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
c000: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c010: 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31  s TK_TO_INT, in1
c020: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
c030: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c040: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
c050: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
c060: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
c070: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
c080: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c090: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
c0a0: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
c0b0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c0c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c0d0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
c0e0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
c0f0: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
c100: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c110: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
c120: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
c130: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
c140: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
c150: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c160: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
c170: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c180: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
c190: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
c1a0: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
c1b0: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
c1c0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
c1d0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
c1e0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
c1f0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
c200: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c210: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
c220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c230: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
c240: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
c250: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c260: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
c270: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c280: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
c290: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
c2a0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
c2b0: 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20  MIT_CAST */../* 
c2c0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
c2d0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
c2e0: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
c2f0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c300: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
c310: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
c320: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
c330: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
c340: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
c350: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
c360: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
c370: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
c380: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
c390: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
c3a0: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
c3b0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
c3c0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
c3d0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
c3e0: 72 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ru if either ope
c3f0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
c400: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
c410: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
c420: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
c430: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
c440: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
c450: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
c460: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
c470: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
c480: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
c490: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
c4a0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
c4b0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
c4c0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
c4d0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
c4e0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
c4f0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
c500: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
c510: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
c520: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
c530: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
c540: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
c550: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
c560: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
c570: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
c580: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
c590: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
c5a0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
c5b0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
c5c0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
c5d0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
c5e0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
c5f0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
c600: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
c610: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
c620: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
c630: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
c640: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
c650: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
c660: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
c670: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
c680: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
c690: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
c6a0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
c6b0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
c6c0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c6d0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
c6e0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
c6f0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
c700: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
c710: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
c720: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
c730: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
c740: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
c750: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
c760: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
c770: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
c780: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
c790: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
c7a0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
c7b0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
c7c0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
c7d0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
c7e0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
c7f0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
c800: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
c810: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
c820: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  If the SQLITE_ST
c830: 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20  OREP2 bit of P5 
c840: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20  is set, then do 
c850: 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65  not jump.  Inste
c860: 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62  ad,.** store a b
c870: 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65  oolean result (e
c880: 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f  ither 0, or 1, o
c890: 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73  r NULL) in regis
c8a0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ter P2..*/./* Op
c8b0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
c8c0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
c8d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
c8e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
c8f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
c900: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
c910: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
c920: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
c930: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
c940: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
c950: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
c960: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
c970: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
c980: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
c990: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
c9a0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
c9b0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
c9c0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
c9d0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
c9e0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
c9f0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
ca00: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
ca10: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
ca20: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
ca30: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
ca40: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
ca50: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
ca60: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
ca70: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ca80: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ca90: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
caa0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
cab0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
cac0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
cad0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
cae0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
caf0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
cb00: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
cb10: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
cb20: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
cb30: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
cb40: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
cb50: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
cb60: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
cb70: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
cb80: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
cb90: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
cba0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
cbb0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
cbc0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
cbd0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
cbe0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
cbf0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
cc00: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
cc10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
cc20: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
cc30: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
cc40: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
cc50: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
cc60: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
cc70: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
cc80: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
cc90: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
cca0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ccb0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ccc0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ccd0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
cce0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ccf0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
cd00: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
cd10: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
cd20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd30: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
cd40: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
cd50: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
cd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd70: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
cd80: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
cd90: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
cda0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cdb0: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
cdc0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
cdd0: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
cde0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cdf0: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ce00: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ce10: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ce20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ce30: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ce40: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
ce50: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
ce60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
ce70: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ce80: 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  3 */.  int flags
ce90: 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
cea0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20  har affinity;.. 
ceb0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
cec0: 6c 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73  lags|pIn3->flags
ced0: 3b 0a 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d  ;..  if( flags&M
cee0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
cef0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
cf00: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
cf10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
cf20: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
cf30: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
cf40: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
cf50: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
cf60: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f  t is set..    */
cf70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
cf80: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
cf90: 32 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20  2 ){.      pOut 
cfa0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
cfb0: 70 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65  p2];.      MemSe
cfc0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
cfd0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
cfe0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
cff0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
d000: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
d010: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
d020: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
d030: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
d040: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  1;.    }.    bre
d050: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e  ak;.  }..  affin
d060: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
d070: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
d080: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20  .  if( affinity 
d090: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
d0a0: 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e  nity(pIn1, affin
d0b0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
d0c0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
d0d0: 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79  y(pIn3, affinity
d0e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
d0f0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
d100: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
d110: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
d120: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d130: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
d140: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
d150: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
d160: 70 49 6e 31 29 3b 0a 20 20 45 78 70 61 6e 64 42  pIn1);.  ExpandB
d170: 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 72 65 73  lob(pIn3);.  res
d180: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
d190: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
d1a0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
d1b0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
d1c0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
d1d0: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
d1e0: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
d1f0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d200: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
d210: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
d220: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
d230: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
d240: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
d250: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
d260: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
d270: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d280: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
d290: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
d2a0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
d2b0: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
d2c0: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
d2d0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
d2e0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
d2f0: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
d300: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
d310: 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65  ->p2];.    MemSe
d320: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d330: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
d340: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
d350: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
d360: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
d370: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
d380: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
d390: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
d3a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d3b0: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
d3c0: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
d3d0: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 61 74   Set the permuat
d3e0: 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
d3f0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
d400: 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72  tor to be the ar
d410: 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ray.** of intege
d420: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20  rs in P4..**.** 
d430: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
d440: 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e  is only valid un
d450: 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f  til the next OP_
d460: 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f  Permutation, OP_
d470: 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48  Compare,.** OP_H
d480: 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c  alt, or OP_Resul
d490: 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79  tRow.  Typically
d4a0: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
d4b0: 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72  ion should occur
d4c0: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  .** immediately 
d4d0: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f  prior to the OP_
d4e0: 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65  Compare..*/.case
d4f0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
d500: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
d510: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
d520: 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
d530: 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
d540: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
d550: 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61  p->p4.ai;.  brea
d560: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d570: 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
d580: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  3 P4 *.**.** Com
d590: 70 61 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20  pare to vectors 
d5a0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
d5b0: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
d5c0: 50 33 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a  P3-1) (all this.
d5d0: 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20  ** one "A") and 
d5e0: 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
d5f0: 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
d600: 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
d610: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
d620: 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
d630: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
d640: 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
d650: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
d660: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
d670: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
d680: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
d690: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
d6a0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
d6b0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
d6c0: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
d6d0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
d6e0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
d6f0: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
d700: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
d710: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
d720: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
d730: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
d740: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
d750: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
d760: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
d770: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
d780: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
d790: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
d7a0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
d7b0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
d7c0: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
d7d0: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  t n = pOp->p3;. 
d7e0: 20 69 6e 74 20 69 2c 20 70 31 2c 20 70 32 3b 0a   int i, p1, p2;.
d7f0: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
d800: 2a 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  *pKeyInfo = pOp-
d810: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
d820: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
d830: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
d840: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
d850: 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
d860: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 2d 31  ( p1>0 && p1+n-1
d870: 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 32  <p->nMem );.  p2
d880: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
d890: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
d8a0: 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  +n-1<p->nMem );.
d8b0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
d8c0: 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 69 64  i++){.    int id
d8d0: 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
d8e0: 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
d8f0: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
d900: 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
d910: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
d920: 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
d930: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 52 65 76   */.    int bRev
d940: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
d950: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
d960: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
d970: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
d980: 43 45 28 70 31 2b 69 64 78 2c 20 26 70 2d 3e 61  CE(p1+idx, &p->a
d990: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
d9a0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d9b0: 28 70 32 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65  (p2+idx, &p->aMe
d9c0: 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
d9d0: 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
d9e0: 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
d9f0: 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
da00: 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
da10: 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
da20: 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
da30: 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
da40: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
da50: 72 65 28 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69  re(&p->aMem[p1+i
da60: 64 78 5d 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  dx], &p->aMem[p2
da70: 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
da80: 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
da90: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
daa0: 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
dab0: 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
dac0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
dad0: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
dae0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
daf0: 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
db00: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
db10: 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
db20: 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
db30: 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
db40: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
db50: 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
db60: 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
db70: 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
db80: 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
db90: 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
dba0: 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
dbb0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
dbc0: 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
dbd0: 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
dbe0: 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
dbf0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
dc00: 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
dc10: 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
dc20: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d  pOp->p1 - 1;.  }
dc30: 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
dc40: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
dc50: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
dc60: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
dc70: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d  pOp->p3 - 1;.  }
dc80: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
dc90: 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
dca0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
dcb0: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
dcc0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
dcd0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
dce0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
dcf0: 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
dd00: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
dd10: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
dd20: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
dd30: 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
dd40: 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
dd50: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
dd60: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
dd70: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
dd80: 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
dd90: 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
dda0: 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
ddb0: 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
ddc0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
ddd0: 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
dde0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
ddf0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
de00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
de10: 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
de20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
de30: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
de40: 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
de50: 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
de60: 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
de70: 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
de80: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
de90: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
dea0: 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
deb0: 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
dec0: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
ded0: 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
dee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
def0: 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
df00: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
df10: 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
df20: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
df30: 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
df40: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
df50: 74 20 76 31 2c 20 76 32 3b 20 20 20 20 2f 2a 20  t v1, v2;    /* 
df60: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
df70: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
df80: 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 69 66 28 20   NULL */..  if( 
df90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
dfa0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
dfb0: 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
dfc0: 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
dfd0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
dfe0: 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
dff0: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
e000: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
e010: 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
e020: 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
e030: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
e040: 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
e050: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e060: 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
e070: 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
e080: 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
e090: 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
e0a0: 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
e0b0: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
e0c0: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
e0d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
e0e0: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
e0f0: 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
e100: 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
e110: 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
e120: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
e130: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
e140: 20 20 7d 0a 20 20 69 66 28 20 76 31 3d 3d 32 20    }.  if( v1==2 
e150: 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
e160: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e170: 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
e180: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
e190: 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
e1a0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
e1b0: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
e1c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e1d0: 3a 20 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a  : Not P1 * * * *
e1e0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
e1f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e200: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
e210: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 52  oolean value.  R
e220: 65 70 6c 61 63 65 20 69 74 0a 2a 2a 20 77 69 74  eplace it.** wit
e230: 68 20 69 74 73 20 63 6f 6d 70 6c 65 6d 65 6e 74  h its complement
e240: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
e250: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
e260: 73 20 4e 55 4c 4c 20 69 74 73 20 76 61 6c 75 65  s NULL its value
e270: 0a 2a 2a 20 69 73 20 75 6e 63 68 61 6e 67 65 64  .** is unchanged
e280: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
e290: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e2a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e2b0: 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  _NOT, in1 */.  i
e2c0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e2d0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
e2e0: 6b 3b 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e  k;  /* Do nothin
e2f0: 67 20 74 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20  g to NULLs */.  
e300: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
e310: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
e320: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 21 70    pIn1->u.i = !p
e330: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65  In1->u.i;.  asse
e340: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
e350: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 62 72 65  MEM_Int );.  bre
e360: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e370: 3a 20 42 69 74 4e 6f 74 20 50 31 20 2a 20 2a 20  : BitNot P1 * * 
e380: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  * *.**.** Interp
e390: 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
e3a0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
e3b0: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 52  s an integer.  R
e3c0: 65 70 6c 61 63 65 20 69 74 0a 2a 2a 20 77 69 74  eplace it.** wit
e3d0: 68 20 69 74 73 20 6f 6e 65 73 2d 63 6f 6d 70 6c  h its ones-compl
e3e0: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 76  ement.  If the v
e3f0: 61 6c 75 65 20 69 73 20 6f 72 69 67 69 6e 61 6c  alue is original
e400: 6c 79 20 4e 55 4c 4c 2c 20 6c 65 61 76 65 0a 2a  ly NULL, leave.*
e410: 2a 20 69 74 20 75 6e 63 68 61 6e 67 65 64 2e 0a  * it unchanged..
e420: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
e430: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e440: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
e450: 49 54 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  ITNOT, in1 */.  
e460: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
e470: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
e480: 61 6b 3b 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69  ak;  /* Do nothi
e490: 6e 67 20 74 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20  ng to NULLs */. 
e4a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
e4b0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
e4c0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 7e  .  pIn1->u.i = ~
e4d0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 61 73 73  pIn1->u.i;.  ass
e4e0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
e4f0: 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 62 72  &MEM_Int );.  br
e500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e510: 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
e520: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
e530: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
e540: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e550: 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
e560: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
e570: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
e580: 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
e590: 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
e5a0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
e5b0: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
e5c0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
e5d0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
e5e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
e5f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
e600: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
e610: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
e620: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
e630: 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lse.  The value 
e640: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e650: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68  red true if it h
e660: 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
e670: 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
e680: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
e690: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
e6a0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
e6b0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
e6c0: 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
e6e0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
e6f0: 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
e700: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e710: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
e720: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e730: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e740: 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
e750: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
e760: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
e770: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
e780: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
e790: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
e7a0: 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
e7b0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
e7c0: 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
e7d0: 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
e7e0: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
e7f0: 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
e800: 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  }.  if( c ){.   
e810: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
e820: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e830: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
e840: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
e850: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
e860: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
e870: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e880: 4e 55 4c 4c 2e 20 20 49 66 20 50 33 20 69 73 20  NULL.  If P3 is 
e890: 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
e8a0: 7a 65 72 6f 2c 20 74 68 65 6e 20 63 68 65 63 6b  zero, then check
e8b0: 20 61 6c 6c 20 76 61 6c 75 65 73 20 72 65 67 28   all values reg(
e8c0: 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
e8d0: 0a 2a 2a 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  .** reg(P1+2), .
e8e0: 2e 2e 2c 20 72 65 67 28 50 31 2b 50 33 2d 31 29  .., reg(P1+P3-1)
e8f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
e900: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
e910: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e920: 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
e930: 31 20 2a 2f 0a 20 20 69 6e 74 20 6e 20 3d 20 70  1 */.  int n = p
e940: 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
e950: 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
e960: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 64  pOp->p1>0 );.  d
e970: 6f 7b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  o{.    if( (pIn1
e980: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
e990: 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ll)!=0 ){.      
e9a0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
e9b0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
e9c0: 20 20 20 7d 0a 20 20 20 20 70 49 6e 31 2b 2b 3b     }.    pIn1++;
e9d0: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 3e  .  }while( --n >
e9e0: 20 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   0 );.  break;.}
e9f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
ea00: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
ea10: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
ea20: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
ea30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
ea40: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
ea50: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
ea60: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
ea70: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
ea80: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
ea90: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
eaa0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
eab0: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
eac0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
ead0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
eae0: 4f 70 63 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f  Opcode: SetNumCo
eaf0: 6c 75 6d 6e 73 20 2a 20 50 32 20 2a 20 2a 20 2a  lumns * P2 * * *
eb00: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
eb10: 64 65 20 73 65 74 73 20 74 68 65 20 6e 75 6d 62  de sets the numb
eb20: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
eb30: 72 20 74 68 65 20 63 75 72 73 6f 72 20 6f 70 65  r the cursor ope
eb40: 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 66 6f  ned by the.** fo
eb50: 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
eb60: 69 6f 6e 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ion to P2..**.**
eb70: 20 41 6e 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c   An OP_SetNumCol
eb80: 75 6d 6e 73 20 69 73 20 6f 6e 6c 79 20 75 73 65  umns is only use
eb90: 66 75 6c 20 69 66 20 69 74 20 6f 63 63 75 72 73  ful if it occurs
eba0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66   immediately bef
ebb0: 6f 72 65 20 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74  ore .** one of t
ebc0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63  he following opc
ebd0: 6f 64 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  odes:.**.**     
ebe0: 4f 70 65 6e 52 65 61 64 0a 2a 2a 20 20 20 20 20  OpenRead.**     
ebf0: 4f 70 65 6e 57 72 69 74 65 0a 2a 2a 20 20 20 20  OpenWrite.**    
ec00: 20 4f 70 65 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a   OpenPseudo.**.*
ec10: 2a 20 49 66 20 74 68 65 20 4f 50 5f 43 6f 6c 75  * If the OP_Colu
ec20: 6d 6e 20 6f 70 63 6f 64 65 20 69 73 20 74 6f 20  mn opcode is to 
ec30: 62 65 20 65 78 65 63 75 74 65 64 20 6f 6e 20 61  be executed on a
ec40: 20 63 75 72 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a   cursor, then.**
ec50: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73   this opcode mus
ec60: 74 20 62 65 20 70 72 65 73 65 6e 74 20 69 6d 6d  t be present imm
ec70: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
ec80: 74 68 65 20 6f 70 63 6f 64 65 20 74 68 61 74 0a  the opcode that.
ec90: 2a 2a 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  ** opens the cur
eca0: 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sor..*/.case OP_
ecb0: 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b  SetNumColumns: {
ecc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ecd0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
ece0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
ecf0: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
ed00: 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
ed10: 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
ed20: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
ed30: 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
ed40: 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
ed50: 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
ed60: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
ed70: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ed80: 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
ed90: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
eda0: 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
edb0: 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
edc0: 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
edd0: 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
ede0: 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
edf0: 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
ee00: 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
ee10: 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
ee20: 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
ee30: 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
ee40: 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
ee50: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
ee60: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
ee70: 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
ee80: 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
ee90: 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
eea0: 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
eeb0: 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
eec0: 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
eed0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
eee0: 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
eef0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
ef00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
ef10: 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 61 79 6c 6f  n: {.  int paylo
ef20: 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d  adSize;   /* Num
ef30: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
ef40: 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
ef50: 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
ef60: 3b 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f  ;  /* P1 value o
ef70: 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a  f the opcode */.
ef80: 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e    int p2 = pOp->
ef90: 70 32 3b 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e  p2;  /* column n
efa0: 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
efb0: 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
efc0: 72 20 2a 70 43 20 3d 20 30 3b 2f 2a 20 54 68 65  r *pC = 0;/* The
efd0: 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
efe0: 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20    char *zRec;   
eff0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
f000: 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  to complete reco
f010: 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43  rd-data */.  BtC
f020: 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
f030: 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
f040: 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
f050: 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
f060: 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
f070: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
f080: 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
f090: 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
f0a0: 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
f0b0: 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
f0c0: 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
f0d0: 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
f0e0: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  mn */.  int nFie
f0f0: 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75  ld;        /* nu
f100: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
f110: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
f120: 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
f130: 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
f140: 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
f150: 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
f160: 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
f170: 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
f180: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
f190: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74   */.  char *zDat
f1a0: 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74  a;       /* Part
f1b0: 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
f1c0: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f1d0: 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
f1e0: 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
f1f0: 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
f200: 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
f210: 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
f220: 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
f230: 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
f240: 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 0a 20  ng decoded */.. 
f250: 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b   sMem.flags = 0;
f260: 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a  .  sMem.db = 0;.
f270: 20 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d    sMem.zMalloc =
f280: 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   0;.  assert( p1
f290: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
f2a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
f2b0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
f2c0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
f2d0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
f2e0: 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54  ->p3];.  MemSetT
f2f0: 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
f300: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20  EM_Null);..  /* 
f310: 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20  This block sets 
f320: 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79  the variable pay
f330: 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74  loadSize to be t
f340: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
f350: 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e  of.  ** bytes in
f360: 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a   the record..  *
f370: 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73  *.  ** zRec is s
f380: 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d  et to be the com
f390: 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68  plete text of th
f3a0: 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69  e record if it i
f3b0: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a  s available..  *
f3c0: 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  * The complete r
f3d0: 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c  ecord text is al
f3e0: 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ways available f
f3f0: 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  or pseudo-tables
f400: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63  .  ** If the rec
f410: 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
f420: 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63   a cursor, the c
f430: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
f440: 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62  ext.  ** might b
f450: 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
f460: 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  he  pC->aRow cac
f470: 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74  he.  Or it might
f480: 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66   not be..  ** If
f490: 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61   the data is una
f4a0: 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20  vailable,  zRec 
f4b0: 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  is set to NULL..
f4c0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73    **.  ** We als
f4d0: 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  o compute the nu
f4e0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f4f0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  in the record.  
f500: 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a  For cursors,.  *
f510: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
f520: 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65  columns is store
f530: 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72  d in the VdbeCur
f540: 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65  sor.nField eleme
f550: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20  nt..  */.  pC = 
f560: 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20  p->apCsr[p1];.  
f570: 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
f580: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f590: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
f5a0: 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
f5b0: 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
f5c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
f5d0: 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
f5e0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
f5f0: 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  rd is stored in 
f600: 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20  a B-Tree */.    
f610: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
f620: 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
f630: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
f640: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
f650: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63  _error;.    zRec
f660: 20 3d 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20   = 0;.    pCrsr 
f670: 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
f680: 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
f690: 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  ow ){.      payl
f6a0: 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20  oadSize = 0;.   
f6b0: 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63   }else if( pC->c
f6c0: 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
f6d0: 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20  acheCtr ){.     
f6e0: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
f6f0: 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
f700: 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68        zRec = (ch
f710: 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  ar*)pC->aRow;.  
f720: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
f730: 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
f740: 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
f750: 36 34 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  64;.      sqlite
f760: 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
f770: 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
f780: 65 36 34 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  e64);.      payl
f790: 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61  oadSize = payloa
f7a0: 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c  dSize64;.    }el
f7b0: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
f7c0: 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
f7d0: 43 72 73 72 2c 20 28 75 33 32 20 2a 29 26 70 61  Crsr, (u32 *)&pa
f7e0: 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
f7f0: 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  }.    nField = p
f800: 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  C->nField;.  }el
f810: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
f820: 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
f830: 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65  );.    /* The re
f840: 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65  cord is the sole
f850: 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75   entry of a pseu
f860: 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  do-table */.    
f870: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
f880: 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65  ->nData;.    zRe
f890: 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20  c = pC->pData;. 
f8a0: 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
f8b0: 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
f8c0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61  ;.    assert( pa
f8d0: 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20  yloadSize==0 || 
f8e0: 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e  zRec!=0 );.    n
f8f0: 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
f900: 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  ld;.    pCrsr = 
f910: 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  0;.  }..  /* If 
f920: 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30  payloadSize is 0
f930: 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72  , then just stor
f940: 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66  e a NULL */.  if
f950: 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
f960: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
f970: 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
f980: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74  _Null );.    got
f990: 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
f9a0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f  .  }.  if( paylo
f9b0: 61 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69  adSize>db->aLimi
f9c0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
f9d0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
f9e0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
f9f0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
fa00: 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
fa10: 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
fa20: 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
fa30: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
fa40: 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
fa50: 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
fa60: 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
fa70: 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
fa80: 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
fa90: 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
faa0: 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
fab0: 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
fac0: 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
fad0: 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
fae0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75  ;.  }else{.    u
faf0: 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20  8 *zIdx;        
fb00: 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65  /* Index into he
fb10: 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a  ader */.    u8 *
fb20: 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20  zEndHdr;     /* 
fb30: 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
fb40: 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
fb50: 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 6e  header */.    in
fb60: 74 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  t offset;      /
fb70: 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
fb80: 65 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e  e data */.    in
fb90: 74 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f  t szHdrSz;     /
fba0: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
fbb0: 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
fbc0: 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
fbd0: 72 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76  rd */.    int av
fbe0: 61 69 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  ail;       /* Nu
fbf0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
fc00: 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
fc10: 2a 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61  */..    assert(a
fc20: 54 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61  Type);.    pC->a
fc30: 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  Offset = aOffset
fc40: 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64   = &aType[nField
fc50: 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  ];.    pC->paylo
fc60: 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64  adSize = payload
fc70: 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61  Size;.    pC->ca
fc80: 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
fc90: 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a  acheCtr;..    /*
fca0: 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20   Figure out how 
fcb0: 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69  many bytes are i
fcc0: 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  n the header */.
fcd0: 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
fce0: 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52        zData = zR
fcf0: 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ec;.    }else{. 
fd00: 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49       if( pC->isI
fd10: 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  ndex ){.        
fd20: 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
fd30: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
fd40: 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
fd50: 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  l);.      }else{
fd60: 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
fd70: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
fd80: 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
fd90: 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
fda0: 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49      }.      /* I
fdb0: 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74  f KeyFetch()/Dat
fdc0: 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64  aFetch() managed
fdd0: 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69   to get the enti
fde0: 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20  re payload,.    
fdf0: 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61    ** save the pa
fe00: 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d  yload in the pC-
fe10: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68  >aRow cache.  Th
fe20: 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20  at will save us 
fe30: 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61  from.      ** ha
fe40: 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64  ving to make add
fe50: 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f  itional calls to
fe60: 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65   fetch the conte
fe70: 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20  nt portion of.  
fe80: 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
fe90: 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
fea0: 20 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79    if( avail>=pay
feb0: 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
fec0: 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61      zRec = zData
fed0: 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
fee0: 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b  ow = (u8*)zData;
fef0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ff00: 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
ff10: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
ff20: 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  }.    /* The fol
ff30: 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73  lowing assert is
ff40: 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73   true in all cas
ff50: 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20  es accept when. 
ff60: 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
ff70: 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  se file has been
ff80: 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72   corrupted exter
ff90: 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20  nally..    **   
ffa0: 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30   assert( zRec!=0
ffb0: 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f   || avail>=paylo
ffc0: 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e  adSize || avail>
ffd0: 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48  =9 ); */.    szH
ffe0: 64 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74  drSz = getVarint
fff0: 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f  32((u8*)zData, o
10000 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20  ffset);..    /* 
10010 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
10020 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
10030 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
10040 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
10050 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
10060 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
10070 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
10080 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
10090 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
100a0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
100b0 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
100c0 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
100d0 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
100e0 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
100f0 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
10100 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
10110 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
10120 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
10130 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
10140 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
10150 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
10160 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
10170 63 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65  c && avail<offse
10180 74 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  t ){.      sMem.
10190 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
101a0 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20   sMem.db = 0;.  
101b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
101c0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
101d0 28 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65  (pCrsr, 0, offse
101e0 74 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  t, pC->isIndex, 
101f0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
10200 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
10210 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
10220 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10230 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
10240 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
10250 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d   }.    zEndHdr =
10260 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66   (u8 *)&zData[of
10270 66 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20  fset];.    zIdx 
10280 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73  = (u8 *)&zData[s
10290 7a 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a  zHdrSz];..    /*
102a0 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72   Scan the header
102b0 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66   and use it to f
102c0 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65  ill in the aType
102d0 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d  [] and aOffset[]
102e0 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20  .    ** arrays. 
102f0 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63   aType[i] will c
10300 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20  ontain the type 
10310 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20  integer for the 
10320 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75  i-th.    ** colu
10330 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  mn and aOffset[i
10340 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74  ] will contain t
10350 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
10360 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20  he beginning.   
10370 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
10380 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f  d to the start o
10390 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  f the data for t
103a0 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20  he i-th column. 
103b0 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d     */.    for(i=
103c0 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b  0; i<nField; i++
103d0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64  ){.      if( zId
103e0 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20  x<zEndHdr ){.   
103f0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
10400 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  = offset;.      
10410 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72    zIdx += getVar
10420 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70  int32(zIdx, aTyp
10430 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f  e[i]);.        o
10440 66 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33  ffset += sqlite3
10450 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
10460 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20  n(aType[i]);.   
10470 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10480 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73    /* If i is les
10490 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74  s that nField, t
104a0 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65  hen there are le
104b0 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69  ss fields in thi
104c0 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63  s.        ** rec
104d0 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43  ord than SetNumC
104e0 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64  olumns indicated
104f0 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d   there are colum
10500 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  ns in the.      
10510 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20    ** table. Set 
10520 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61  the offset for a
10530 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73  ny extra columns
10540 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a   not present in.
10550 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72          ** the r
10560 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73  ecord to 0. This
10570 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f   tells code belo
10580 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c  w to store a NUL
10590 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73  L.        ** ins
105a0 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c  tead of deserial
105b0 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72  izing a value fr
105c0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  om the record.. 
105d0 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
105e0 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30    aOffset[i] = 0
105f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
10600 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10610 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
10620 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73  ;.    sMem.flags
10630 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20   = MEM_Null;..  
10640 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20    /* If we have 
10650 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72  read more header
10660 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63   data than was c
10670 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
10680 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f  header,.    ** o
10690 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
106a0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
106b0 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73  ppears to be pas
106c0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
106d0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20  .    ** record, 
106e0 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
106f0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
10700 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65  appears to be be
10710 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20  fore the end.   
10720 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
10730 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c  d (when all fiel
10740 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65  ds present), the
10750 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61  n we must be dea
10760 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74  ling .    ** wit
10770 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  h a corrupt data
10780 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  base..    */.   
10790 20 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64   if( zIdx>zEndHd
107a0 72 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c  r || offset>payl
107b0 6f 61 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c  oadSize .     ||
107c0 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20   (zIdx==zEndHdr 
107d0 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f  && offset!=paylo
107e0 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20  adSize) ){.     
107f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
10800 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
10810 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10820 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
10830 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c    /* Get the col
10840 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  umn information.
10850 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
10860 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
10870 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c  n .  ** deserial
10880 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72  ize the value fr
10890 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49  om the record. I
108a0 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
108b0 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e   zero,.  ** then
108c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
108d0 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20  nough fields in 
108e0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61  the record to sa
108f0 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72  tisfy the.  ** r
10900 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73  equest.  In this
10910 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76   case, set the v
10920 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20  alue NULL or to 
10930 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a  P4 if P4 is.  **
10940 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
10950 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f  Mem object..  */
10960 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70  .  if( aOffset[p
10970 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  2] ){.    assert
10980 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
10990 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  );.    if( zRec 
109a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
109b0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
109c0 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20  ternal(pDest);. 
109d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
109e0 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
109f0 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
10a00 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
10a10 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
10a20 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71  {.      len = sq
10a30 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
10a40 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d  ypeLen(aType[p2]
10a50 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10a60 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65  VdbeMemMove(&sMe
10a70 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  m, pDest);.     
10a80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
10a90 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
10aa0 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
10ab0 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
10ac0 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
10ad0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
10ae0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
10af0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10b00 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
10b10 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
10b20 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10b30 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a  beSerialGet((u8*
10b40 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32  )zData, aType[p2
10b50 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
10b60 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20  .    pDest->enc 
10b70 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65  = encoding;.  }e
10b80 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  lse{.    if( pOp
10b90 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
10ba0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10bb0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
10bc0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
10bd0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
10be0 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  tic);.    }else{
10bf0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10c00 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
10c10 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20  Null );.    }.  
10c20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79  }..  /* If we dy
10c30 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
10c40 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c  ted space to hol
10c50 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74  d the data (in t
10c60 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
10c70 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
10c80 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
10c90 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
10ca0 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a  rol of that.  **
10cb0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
10cc0 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65  ocated space ove
10cd0 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73  r to the pDest s
10ce0 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54  tructure..  ** T
10cf0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
10d00 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f  emory copy..  */
10d10 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c  .  if( sMem.zMal
10d20 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72  loc ){.    asser
10d30 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e  t( sMem.z==sMem.
10d40 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61  zMalloc );.    a
10d50 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
10d60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
10d70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10d80 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
10d90 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
10da0 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a  tr)) || pDest->z
10db0 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20  ==sMem.z );.    
10dc0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
10dd0 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f  ~(MEM_Ephem|MEM_
10de0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65  Static);.    pDe
10df0 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  st->flags |= MEM
10e00 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74  _Term;.    pDest
10e10 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
10e20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63    pDest->zMalloc
10e30 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b   = sMem.zMalloc;
10e40 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
10e50 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
10e60 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b  riteable(pDest);
10e70 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
10e80 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
10e90 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
10ea0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10eb0 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
10ec0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10ed0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
10ee0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
10ef0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
10f00 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
10f10 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
10f20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
10f30 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10f40 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
10f50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
10f60 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
10f70 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
10f80 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
10f90 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
10fa0 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
10fb0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
10fc0 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
10fd0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
10fe0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
10ff0 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a  nity: {.  char *
11000 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
11010 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44  >p4.z;.  Mem *pD
11020 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  ata0 = &p->aMem[
11030 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20  pOp->p1];.  Mem 
11040 2a 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30  *pLast = &pData0
11050 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d  [pOp->p2-1];.  M
11060 65 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72  em *pRec;..  for
11070 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
11080 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
11090 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  +){.    ExpandBl
110a0 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70  ob(pRec);.    ap
110b0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
110c0 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
110d0 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
110e0 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ng);.  }.  break
110f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11100 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
11110 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
11120 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
11130 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
11140 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e  th P1 into a sin
11150 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69  gle entry.** sui
11160 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73  table for use as
11170 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
11180 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
11190 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
111a0 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
111b0 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
111c0 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72  he format are ir
111d0 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67  relevant as long
111e0 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f   as.** the OP_Co
111f0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
11200 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
11210 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65  d later..** Refe
11220 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65  r to source code
11230 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68   comments for th
11240 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
11250 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61   record.** forma
11260 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  t..**.** P4 may 
11270 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
11280 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
11290 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
112a0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
112b0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
112c0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
112d0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
112e0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
112f0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
11300 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
11310 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
11320 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
11330 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
11340 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
11350 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
11360 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
11370 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
11380 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
11390 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
113a0 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
113b0 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
113c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
113d0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20  eRecord: {.  /* 
113e0 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
113f0 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
11400 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
11410 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
11420 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
11430 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   **.  ** -------
11440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11450 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11480 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
11490 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
114a0 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
114b0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
114c0 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
114d0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
114e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11510 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
11520 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
11530 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
11540 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
11550 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
11560 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
11570 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e  ** and so froth.
11580 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
11590 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
115a0 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
115b0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
115c0 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
115d0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
115e0 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
115f0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
11600 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
11610 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
11620 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
11630 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
11640 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
11650 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
11660 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
11670 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75   data0..  */.  u
11680 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
11690 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
116a0 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
116b0 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
116c0 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
116d0 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
116e0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
116f0 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
11700 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
11710 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11720 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
11730 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d   */.  int nHdr =
11740 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
11750 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11760 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
11770 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 20 3d  */.  i64 nByte =
11780 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44   0;         /* D
11790 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
117a0 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
117b0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  rd */.  int nZer
117c0 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
117d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
117e0 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
117f0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
11800 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
11810 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
11820 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11830 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
11840 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
11850 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
11860 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
11870 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
11880 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
11890 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
118a0 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
118b0 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
118c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
118d0 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
118e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
118f0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
11900 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11910 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
11920 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
11930 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
11940 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11950 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
11960 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
11970 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
11980 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
11990 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
119a0 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
119b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
119c0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
119d0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
119e0 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  */..  nField = p
119f0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
11a00 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
11a10 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
11a20 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
11a30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
11a40 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  ld<=p->nMem );. 
11a50 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d   pData0 = &p->aM
11a60 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
11a70 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
11a80 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
11a90 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
11aa0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
11ab0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
11ac0 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74  at;..  /* Loop t
11ad0 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
11ae0 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
11af0 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
11b00 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
11b10 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
11b20 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
11b30 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
11b40 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52  d..  */.  for(pR
11b50 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
11b60 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
11b70 0a 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20  .    int len;.  
11b80 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
11b90 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
11ba0 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
11bb0 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74  finity[pRec-pDat
11bc0 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  a0], encoding);.
11bd0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52      }.    if( pR
11be0 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
11bf0 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20  ro && pRec->n>0 
11c00 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
11c10 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
11c20 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  b(pRec);.    }. 
11c30 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
11c40 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
11c50 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
11c60 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
11c70 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
11c80 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
11c90 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
11ca0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
11cb0 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
11cc0 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
11cd0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
11ce0 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
11cf0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
11d00 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65   /* Only pure ze
11d10 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20  ro-filled BLOBs 
11d20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20  can be input to 
11d30 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20  this Opcode..   
11d40 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20     ** We do not 
11d50 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68  allow blobs with
11d60 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20   a prefix and a 
11d70 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c  zero-filled tail
11d80 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f  . */.      nZero
11d90 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20   += pRec->u.i;. 
11da0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e     }else if( len
11db0 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   ){.      nZero 
11dc0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  = 0;.    }.  }..
11dd0 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69    /* Add the ini
11de0 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69  tial header vari
11df0 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65  nt and total the
11e00 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20   size */.  nHdr 
11e10 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c  += nVarint = sql
11e20 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
11e30 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69  dr);.  if( nVari
11e40 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
11e50 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20  Len(nHdr) ){.   
11e60 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
11e70 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
11e80 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e  a-nZero;.  if( n
11e90 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
11ea0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11eb0 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
11ec0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
11ed0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
11ee0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
11ef0 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
11f00 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
11f10 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
11f20 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
11f30 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
11f40 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
11f50 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
11f60 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
11f70 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
11f80 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
11f90 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
11fa0 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
11fb0 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f  Grow() could clo
11fc0 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
11fd0 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
11fe0 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
11ff0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
12000 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
12010 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
12020 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
12030 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12040 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
12050 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79 74  mGrow(pOut, nByt
12060 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  e, 0) ){.    got
12070 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
12080 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
12090 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
120a0 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
120b0 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
120c0 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
120d0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72  rd, nHdr);.  for
120e0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
120f0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
12100 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  +){.    serial_t
12110 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
12120 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
12130 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
12140 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
12150 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
12160 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
12170 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61  );      /* seria
12180 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20  l type */.  }.  
12190 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
121a0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
121b0 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61  ec++){  /* seria
121c0 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20  l data */.    i 
121d0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
121e0 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
121f0 6f 72 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69 2c  ord[i], nByte-i,
12200 20 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d   pRec, file_form
12210 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
12220 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
12230 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12240 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
12250 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
12260 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20  t->n = nByte;.  
12270 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12280 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
12290 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
122a0 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
122b0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  ){.    pOut->u.i
122c0 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
122d0 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
122e0 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
122f0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
12300 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
12310 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
12320 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
12330 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
12340 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
12350 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
12360 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
12370 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
12380 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61  ../* Opcode: Sta
12390 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20  tement P1 * * * 
123a0 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e  *.**.** Begin an
123b0 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74   individual stat
123c0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
123d0 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20  n which is part 
123e0 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74  of a larger.** t
123f0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69  ransaction.  Thi
12400 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74  s is needed so t
12410 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hat the statemen
12420 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c  t.** can be roll
12430 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
12440 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
12450 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
12460 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
12470 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
12480 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
12490 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75  nsaction will au
124a0 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63  tomatically.** c
124b0 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
124c0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
124d0 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
124e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
124f0 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f  urrently in auto
12500 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61  commit mode (tha
12510 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c  t .** is to say,
12520 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74   if it is in bet
12530 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43  ween BEGIN and C
12540 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66  OMMIT).** and if
12550 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74   there are no ot
12560 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65  her active state
12570 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d  ments on the sam
12580 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
12590 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nnection, then t
125a0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
125b0 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74   a no-op.  No st
125c0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
125d0 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64  ion.** is needed
125e0 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72   since any error
125f0 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72   can use the nor
12600 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  mal ROLLBACK pro
12610 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20  cess to.** undo 
12620 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  changes..**.** I
12630 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  f a statement tr
12640 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
12650 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61  rted, then a sta
12660 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66  tement journal f
12670 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61  ile.** will be a
12680 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69  llocated and ini
12690 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20  tialized..**.** 
126a0 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  The statement is
126b0 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61   begun on the da
126c0 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
126d0 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20   index P1.  The 
126e0 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  main.** database
126f0 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64   file has an ind
12700 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20  ex of 0 and the 
12710 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
12720 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a  mporary tables.*
12730 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  * has an index o
12740 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f 1..*/.case OP_
12750 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69  Statement: {.  i
12760 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
12770 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69  t==0 || db->acti
12780 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
12790 20 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e     int i = pOp->
127a0 70 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  p1;.    Btree *p
127b0 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  Bt;.    assert( 
127c0 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44  i>=0 && i<db->nD
127d0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
127e0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21   db->aDb[i].pBt!
127f0 3d 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20  =0 );.    pBt = 
12800 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a  db->aDb[i].pBt;.
12810 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
12820 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
12830 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73  s(pBt) );.    as
12840 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
12850 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30  ask & (1<<i))!=0
12860 20 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c   );.    if( !sql
12870 69 74 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d  ite3BtreeIsInStm
12880 74 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  t(pBt) ){.      
12890 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
128a0 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b  eBeginStmt(pBt);
128b0 0a 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64  .      p->opened
128c0 53 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20  Statement = 1;. 
128d0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
128e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
128f0 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
12900 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
12910 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
12920 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
12930 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
12940 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
12950 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
12960 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
12970 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
12980 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
12990 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
129a0 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
129b0 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74  his one), then t
129c0 68 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  he COMMIT or ROL
129d0 4c 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20  LBACK statement 
129e0 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  fails..**.** Thi
129f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
12a00 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
12a10 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
12a20 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
12a30 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
12a40 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
12a50 0a 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63 6b 20  .  int rollback 
12a60 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74  = pOp->p2;.  int
12a70 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69   turnOnAC = desi
12a80 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26  redAutoCommit &&
12a90 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
12aa0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  ;..  assert( des
12ab0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
12ac0 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
12ad0 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
12ae0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
12af0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 72  toCommit==1 || r
12b00 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 0a 20  ollback==0 );.. 
12b10 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
12b20 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
12b30 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
12b40 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
12b50 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72  ve */..  if( tur
12b60 6e 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62 61 63  nOnAC && rollbac
12b70 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56  k && db->activeV
12b80 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  dbeCnt>1 ){.    
12b90 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
12ba0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
12bb0 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64  s a ROLLBACK and
12bc0 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20   other VMs are. 
12bd0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e     ** still runn
12be0 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73  ing, and a trans
12bf0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
12c00 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  , return an erro
12c10 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20  r indicating.   
12c20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68   ** that the oth
12c30 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
12c40 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
12c50 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
12c60 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
12c70 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
12c80 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
12c90 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
12ca0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
12cb0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
12cc0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
12cd0 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
12ce0 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
12cf0 21 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  !rollback && db-
12d00 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 31 20  >writeVdbeCnt>1 
12d10 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
12d20 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
12d30 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
12d40 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
12d50 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
12d60 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
12d70 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
12d80 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
12d90 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
12da0 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
12db0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
12dc0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
12dd0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
12de0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
12df0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
12e00 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
12e10 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
12e20 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
12e30 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
12e40 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
12e50 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
12e60 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
12e70 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
12e80 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
12e90 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
12ea0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
12eb0 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64 62  ll(db);.      db
12ec0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
12ed0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
12ee0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
12ef0 74 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  t = desiredAutoC
12f00 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
12f10 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
12f20 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
12f30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
12f40 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
12f50 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
12f60 20 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f   1-desiredAutoCo
12f70 6d 6d 69 74 3b 0a 20 20 20 20 20 20 20 20 70 2d  mmit;.        p-
12f80 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
12f90 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
12fa0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
12fb0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
12fc0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
12fd0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12fe0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
12ff0 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
13000 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13010 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
13020 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
13030 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
13040 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
13050 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
13060 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
13070 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
13080 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
13090 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
130a0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
130b0 22 3a 28 0a 20 20 20 20 20 20 20 20 28 72 6f 6c  ":(.        (rol
130c0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
130d0 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
130e0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
130f0 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
13100 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
13110 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
13120 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
13130 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
13140 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
13150 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
13160 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13170 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
13180 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
13190 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
131a0 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61  ion.  The transa
131b0 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20  ction ends when 
131c0 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c  a Commit or Roll
131d0 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69  back.** opcode i
131e0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20  s encountered.  
131f0 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  Depending on the
13200 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74   ON CONFLICT set
13210 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61  ting, the.** tra
13220 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61  nsaction might a
13230 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  lso be rolled ba
13240 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ck if an error i
13250 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
13260 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
13270 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
13280 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
13290 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
132a0 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
132b0 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
132c0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
132d0 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
132e0 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
132f0 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
13300 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
13310 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
13320 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
13330 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
13340 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ses..**.** If P2
13350 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
13360 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
13370 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
13380 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c  d.  A RESERVED l
13390 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e  ock is.** obtain
133a0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
133b0 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77  se file when a w
133c0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
133d0 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f   is started.  No
133e0 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73  .** other proces
133f0 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74  s can start anot
13400 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61  her write transa
13410 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73  ction while this
13420 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
13430 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74  ** underway.  St
13440 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74  arting a write t
13450 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20  ransaction also 
13460 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61  creates a rollba
13470 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a  ck journal. A.**
13480 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
13490 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
134a0 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68  ed before any ch
134b0 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
134c0 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  e to the.** data
134d0 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20  base.  If P2 is 
134e0 32 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65  2 or greater the
134f0 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
13500 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61  ock is also obta
13510 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66  ined.** on the f
13520 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ile..**.** If P2
13530 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
13540 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
13550 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
13560 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
13570 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
13580 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ion: {.  int i =
13590 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65   pOp->p1;.  Btre
135a0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
135b0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d  t( i>=0 && i<db-
135c0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
135d0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
135e0 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a  & (1<<i))!=0 );.
135f0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
13600 69 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  i].pBt;..  if( p
13610 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
13620 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
13630 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
13640 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
13650 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
13660 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
13670 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
13680 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
13690 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
136a0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
136b0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
136c0 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c  TE_OK && rc!=SQL
136d0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20  ITE_READONLY /* 
136e0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  && rc!=SQLITE_BU
136f0 53 59 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67  SY */ ){.      g
13700 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13710 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
13720 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
13730 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
13740 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
13750 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
13760 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
13770 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
13780 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
13790 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
137a0 50 33 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68  P3==0 is the sch
137b0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
137c0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
137d0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
137e0 33 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f  3==2 is the reco
137f0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
13800 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
13810 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
13820 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
13830 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
13840 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
13850 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
13860 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
13870 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
13880 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 65 67  .** If P1 is neg
13890 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 69 73  ative, then this
138a0 20 69 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   is a request to
138b0 20 72 65 61 64 20 74 68 65 20 73 69 7a 65 20 6f   read the size o
138c0 66 20 61 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  f a.** databases
138d0 20 66 72 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d   free-list. P3 m
138e0 75 73 74 20 62 65 20 73 65 74 20 74 6f 20 31 20  ust be set to 1 
138f0 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 54 68  in this case. Th
13900 65 20 61 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61  e actual.** data
13910 62 61 73 65 20 61 63 63 65 73 73 65 64 20 69 73  base accessed is
13920 20 28 28 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f   ((P1+1)*-1). Fo
13930 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 50 31 20  r example, a P1 
13940 70 61 72 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a  parameter of -1.
13950 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ** corresponds t
13960 6f 20 64 61 74 61 62 61 73 65 20 30 20 28 22 6d  o database 0 ("m
13970 61 69 6e 22 29 2c 20 61 20 50 31 20 6f 66 20 2d  ain"), a P1 of -
13980 32 20 69 73 20 64 61 74 61 62 61 73 65 20 31 20  2 is database 1 
13990 28 22 74 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20  ("temp")..**.** 
139a0 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
139b0 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
139c0 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
139d0 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
139e0 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
139f0 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
13a00 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
13a10 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
13a20 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
13a30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
13a40 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
13a50 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
13a60 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
13a70 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ase */.  int iMe
13a80 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  ta;.  int iDb = 
13a90 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69  pOp->p1;.  int i
13aa0 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
13ab0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
13ac0 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
13ad0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66  REE_META );.  if
13ae0 28 20 69 44 62 3c 30 20 29 7b 0a 20 20 20 20 69  ( iDb<0 ){.    i
13af0 44 62 20 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29  Db = (-1*(iDb+1)
13b00 29 3b 0a 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a  );.    iCookie *
13b10 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65  = -1;.  }.  asse
13b20 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
13b30 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
13b40 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
13b50 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
13b60 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
13b70 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
13b80 29 21 3d 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65  )!=0 );.  /* The
13b90 20 69 6e 64 65 78 69 6e 67 20 6f 66 20 6d 65 74   indexing of met
13ba0 61 20 76 61 6c 75 65 73 20 61 74 20 74 68 65 20  a values at the 
13bb0 73 63 68 65 6d 61 20 6c 61 79 65 72 20 69 73 20  schema layer is 
13bc0 6f 66 66 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a  off by one from.
13bd0 20 20 2a 2a 20 74 68 65 20 69 6e 64 65 78 69 6e    ** the indexin
13be0 67 20 69 6e 20 74 68 65 20 62 74 72 65 65 20 6c  g in the btree l
13bf0 61 79 65 72 2e 20 20 54 68 65 20 62 74 72 65 65  ayer.  The btree
13c00 20 63 6f 6e 73 69 64 65 72 73 20 6d 65 74 61 5b   considers meta[
13c10 30 5d 20 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68  0] to.  ** be th
13c20 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65  e number of free
13c30 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
13c40 74 61 62 61 73 65 20 28 61 20 72 65 61 64 2d 6f  tabase (a read-o
13c50 6e 6c 79 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20  nly value).  ** 
13c60 61 6e 64 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62  and meta[1] to b
13c70 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  e the schema coo
13c80 6b 69 65 2e 20 20 54 68 65 20 73 63 68 65 6d 61  kie.  The schema
13c90 20 6c 61 79 65 72 20 63 6f 6e 73 69 64 65 72 73   layer considers
13ca0 0a 20 20 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f  .  ** meta[1] to
13cb0 20 62 65 20 74 68 65 20 73 63 68 65 6d 61 20 63   be the schema c
13cc0 6f 6f 6b 69 65 2e 20 20 53 6f 20 77 65 20 68 61  ookie.  So we ha
13cd0 76 65 20 74 6f 20 73 68 69 66 74 20 74 68 65 20  ve to shift the 
13ce0 69 6e 64 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e  index.  ** by on
13cf0 65 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e in the followi
13d00 6e 67 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ng statement..  
13d10 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
13d20 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
13d30 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
13d40 31 20 2b 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  1 + iCookie, (u3
13d50 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
13d60 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
13d70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
13d80 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
13d90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
13da0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
13db0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
13dc0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
13dd0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
13de0 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72  ster P3 (interpr
13df0 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
13e00 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b  er).** into cook
13e10 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
13e20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
13e30 50 32 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68  P2==0 is the sch
13e40 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
13e50 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
13e60 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
13e70 32 3d 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f  2==2 is the reco
13e80 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
13e90 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
13ea0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
13eb0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
13ec0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
13ed0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
13ee0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
13ef0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
13f00 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
13f10 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
13f20 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
13f30 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
13f40 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
13f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
13f60 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
13f70 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
13f80 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
13f90 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
13fa0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
13fb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
13fc0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
13fd0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
13fe0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
13ff0 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
14000 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
14010 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
14020 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
14030 42 74 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  Bt!=0 );.  sqlit
14040 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
14050 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
14060 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
14070 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
14080 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
14090 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
140a0 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
140b0 70 44 62 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d  pDb->pBt, 1+pOp-
140c0 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
140d0 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
140e0 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  >p2==0 ){.    /*
140f0 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
14100 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
14110 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
14120 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
14130 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
14140 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
14150 6f 6b 69 65 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  okie = pIn3->u.i
14160 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
14170 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
14180 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
14190 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20   if( pOp->p2==1 
141a0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
141b0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
141c0 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
141d0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
141e0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70  >file_format = p
141f0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In3->u.i;.  }.  
14200 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
14210 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
14220 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
14230 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
14240 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
14250 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
14260 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
14270 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
14280 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
14290 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
142a0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a 20  ments(db);.  }. 
142b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
142c0 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b  code: VerifyCook
142d0 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a  ie P1 P2 *.**.**
142e0 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
142f0 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62   of global datab
14300 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  ase parameter nu
14310 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73  mber 0 (the.** s
14320 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61  chema version) a
14330 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  nd make sure it 
14340 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e 20  is equal to P2. 
14350 20 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64   .** P1 is the d
14360 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77  atabase number w
14370 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68  hich is 0 for th
14380 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
14390 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f  file.** and 1 fo
143a0 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69  r the file holdi
143b0 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ng temporary tab
143c0 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67  les and some hig
143d0 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f  her number.** fo
143e0 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  r auxiliary data
143f0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  bases..**.** The
14400 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
14410 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
14420 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
14430 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
14440 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
14450 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
14460 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
14470 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
14480 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
14490 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
144a0 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
144b0 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
144c0 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20  .**.** Either a 
144d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
144e0 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73  s to have been s
144f0 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f  tarted or an OP_
14500 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f  Open needs.** to
14510 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f   be executed (to
14520 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61   establish a rea
14530 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74  d lock) before t
14540 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a  his opcode is.**
14550 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73   invoked..*/.cas
14560 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69  e OP_VerifyCooki
14570 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61  e: {.  int iMeta
14580 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
14590 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
145a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
145b0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
145c0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
145d0 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
145e0 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
145f0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
14600 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74  ].pBt;.  if( pBt
14610 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
14620 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
14630 28 70 42 74 2c 20 31 2c 20 28 75 33 32 20 2a 29  (pBt, 1, (u32 *)
14640 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65  &iMeta);.  }else
14650 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
14660 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d 65 74 61 20  E_OK;.    iMeta 
14670 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  = 0;.  }.  if( r
14680 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
14690 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29  iMeta!=pOp->p2 )
146a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
146b0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
146c0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
146d0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
146e0 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
146f0 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
14700 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
14710 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
14720 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
14730 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
14740 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
14750 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
14760 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
14770 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
14780 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
14790 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
147a0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
147b0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
147c0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
147d0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
147e0 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
147f0 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
14800 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
14810 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
14820 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
14830 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
14840 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
14850 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
14860 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
14870 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
14880 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
14890 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
148a0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
148b0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
148c0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
148d0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
148e0 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
148f0 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
14900 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
14910 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
14920 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
14930 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
14940 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
14950 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
14960 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
14970 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
14980 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
14990 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
149a0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
149b0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
149c0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
149d0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
149e0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
149f0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
14a00 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
14a10 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
14a20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
14a30 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
14a40 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ma(db, pOp->p1);
14a50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
14a60 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
14a70 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
14a80 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
14a90 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
14aa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
14ab0 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
14ac0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
14ad0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
14ae0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
14af0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
14b00 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
14b10 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
14b20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
14b30 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14b40 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
14b50 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
14b60 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
14b70 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
14b80 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
14b90 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
14ba0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
14bb0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
14bc0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
14bd0 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
14be0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
14bf0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
14c00 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
14c10 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
14c20 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
14c30 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
14c40 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
14c50 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
14c60 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
14c70 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
14c80 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
14c90 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
14ca0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
14cb0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
14cc0 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
14cd0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
14ce0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
14cf0 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
14d00 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
14d10 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
14d20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
14d30 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
14d40 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
14d50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
14d60 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
14d70 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
14d80 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
14d90 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
14da0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
14db0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
14dc0 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
14dd0 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
14de0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
14df0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
14e00 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
14e10 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
14e20 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
14e30 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
14e40 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
14e50 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
14e60 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
14e70 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
14e80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
14e90 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
14ea0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
14eb0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
14ec0 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
14ed0 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
14ee0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
14ef0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
14f00 61 6c 75 65 20 69 73 20 61 20 70 6f 69 6e 74 65  alue is a pointe
14f10 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  r to a KeyInfo s
14f20 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
14f30 66 69 6e 65 73 20 74 68 65 0a 2a 2a 20 63 6f 6e  fines the.** con
14f40 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
14f50 6e 67 20 73 65 71 75 65 6e 63 65 20 6f 66 20 69  ng sequence of i
14f60 6e 64 69 63 65 73 2e 20 20 50 34 20 69 73 20 4e  ndices.  P4 is N
14f70 55 4c 4c 20 66 6f 72 20 63 75 72 73 6f 72 73 0a  ULL for cursors.
14f80 2a 2a 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ** that are not 
14f90 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 64 69  pointing to indi
14fa0 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ces..**.** See a
14fb0 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
14fc0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
14fd0 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
14fe0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
14ff0 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
15000 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
15010 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
15020 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
15030 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
15040 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
15050 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
15060 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
15070 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
15080 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
15090 20 76 61 6c 75 65 20 69 73 20 61 20 70 6f 69 6e   value is a poin
150a0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
150b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
150c0 64 65 66 69 6e 65 73 20 74 68 65 0a 2a 2a 20 63  defines the.** c
150d0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
150e0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6f 66  ting sequence of
150f0 20 69 6e 64 69 63 65 73 2e 20 20 50 34 20 69 73   indices.  P4 is
15100 20 4e 55 4c 4c 20 66 6f 72 20 63 75 72 73 6f 72   NULL for cursor
15110 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 6e 6f  s.** that are no
15120 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  t pointing to in
15130 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  dices..**.** Thi
15140 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
15150 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
15160 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
15170 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
15180 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
15190 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
151a0 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
151b0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
151c0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
151d0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
151e0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
151f0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
15200 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
15210 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
15220 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
15230 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
15240 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
15250 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
15260 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70  ;.  int p2 = pOp
15270 2d 3e 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 20  ->p2;.  int iDb 
15280 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
15290 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
152a0 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
152b0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
152c0 70 44 62 3b 0a 20 20 0a 20 20 61 73 73 65 72 74  pDb;.  .  assert
152d0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
152e0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
152f0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
15300 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
15310 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
15320 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
15330 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
15340 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
15350 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
15360 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
15370 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
15380 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  1;.    if( pDb->
15390 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
153a0 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
153b0 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
153c0 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
153d0 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
153e0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
153f0 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
15400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
15410 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
15420 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
15430 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
15440 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
15450 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
15460 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
15470 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  p2];.    sqlite3
15480 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
15490 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
154a0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
154b0 20 69 66 28 20 70 32 3c 32 20 29 20 7b 0a 20 20   if( p2<2 ) {.  
154c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
154d0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
154e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
154f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15500 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28   }.  }.  assert(
15510 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20   i>=0 );.  pCur 
15520 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
15530 28 70 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c  (p, i, &pOp[-1],
15540 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20   iDb, 1);.  if( 
15550 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
15560 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
15570 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63  ullRow = 1;.  rc
15580 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
15590 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
155a0 46 6c 61 67 2c 20 70 4f 70 2d 3e 70 34 2e 70 2c  Flag, pOp->p4.p,
155b0 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b   pCur->pCursor);
155c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
155d0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
155e0 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79  {.    pCur->pKey
155f0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
15600 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 43 75  KeyInfo;.    pCu
15610 72 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  r->pKeyInfo->enc
15620 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
15630 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 75 72   }else{.    pCur
15640 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a  ->pKeyInfo = 0;.
15650 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 72 63    }.  switch( rc
15660 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
15670 49 54 45 5f 42 55 53 59 3a 20 7b 0a 20 20 20 20  ITE_BUSY: {.    
15680 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
15690 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
156a0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
156b0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
156c0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
156d0 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
156e0 7b 0a 20 20 20 20 20 20 69 6e 74 20 66 6c 61 67  {.      int flag
156f0 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
15700 46 6c 61 67 73 28 70 43 75 72 2d 3e 70 43 75 72  Flags(pCur->pCur
15710 73 6f 72 29 3b 0a 20 20 20 20 20 20 2f 2a 20 53  sor);.      /* S
15720 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 2e 20  anity checking. 
15730 20 4f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   Only the lower 
15740 66 6f 75 72 20 62 69 74 73 20 6f 66 20 74 68 65  four bits of the
15750 20 66 6c 61 67 73 20 62 79 74 65 20 73 68 6f 75   flags byte shou
15760 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 75  ld.      ** be u
15770 73 65 64 2e 20 20 42 69 74 20 33 20 28 6d 61 73  sed.  Bit 3 (mas
15780 6b 20 30 78 30 38 29 20 69 73 20 75 6e 70 72 65  k 0x08) is unpre
15790 64 69 63 74 61 62 6c 65 2e 20 20 54 68 65 20 6c  dictable.  The l
157a0 6f 77 65 72 20 33 20 62 69 74 73 0a 20 20 20 20  ower 3 bits.    
157b0 20 20 2a 2a 20 28 6d 61 73 6b 20 30 78 30 37 29    ** (mask 0x07)
157c0 20 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65   should be eithe
157d0 72 20 35 20 28 69 6e 74 6b 65 79 2b 6c 65 61 66  r 5 (intkey+leaf
157e0 64 61 74 61 20 66 6f 72 20 74 61 62 6c 65 73 29  data for tables)
157f0 20 6f 72 0a 20 20 20 20 20 20 2a 2a 20 32 20 28   or.      ** 2 (
15800 7a 65 72 6f 64 61 74 61 20 66 6f 72 20 69 6e 64  zerodata for ind
15810 69 63 65 73 29 2e 20 20 49 66 20 74 68 65 73 65  ices).  If these
15820 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20   conditions are 
15830 6e 6f 74 20 6d 65 74 20 69 74 20 63 61 6e 0a 20  not met it can. 
15840 20 20 20 20 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61       ** only mea
15850 6e 20 74 68 61 74 20 77 65 20 61 72 65 20 64 65  n that we are de
15860 61 6c 69 6e 67 20 77 69 74 68 20 61 20 63 6f 72  aling with a cor
15870 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
15880 6c 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  le.      */.    
15890 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 30    if( (flags & 0
158a0 78 66 30 29 21 3d 30 20 7c 7c 20 28 28 66 6c 61  xf0)!=0 || ((fla
158b0 67 73 20 26 20 30 78 30 37 29 21 3d 35 20 26 26  gs & 0x07)!=5 &&
158c0 20 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21   (flags & 0x07)!
158d0 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  =2) ){.        r
158e0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
158f0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
15900 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15910 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
15920 7d 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  }.      pCur->is
15930 54 61 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26  Table = (flags &
15940 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d   BTREE_INTKEY)!=
15950 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69  0;.      pCur->i
15960 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67 73 20  sIndex = (flags 
15970 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  & BTREE_ZERODATA
15980 29 21 3d 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49  )!=0;.      /* I
15990 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e 73  f P4==0 it means
159a0 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65 64   we are expected
159b0 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65   to open a table
159c0 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68 65 6e  .  If P4!=0 then
159d0 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70  .      ** we exp
159e0 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e  ect to be openin
159f0 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  g an index.  If 
15a00 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74  this is not what
15a10 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20   happened,.     
15a20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74   ** then the dat
15a30 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
15a40 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15a50 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62  if( (pCur->isTab
15a60 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70  le && pOp->p4typ
15a70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a 20  e==P4_KEYINFO). 
15a80 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e        || (pCur->
15a90 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e  isIndex && pOp->
15aa0 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
15ab0 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  FO) ){.        r
15ac0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
15ad0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
15ae0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15af0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
15b00 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
15b10 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
15b20 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20  LITE_EMPTY: {.  
15b30 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c      pCur->isTabl
15b40 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
15b50 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20  =P4_KEYINFO;.   
15b60 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78     pCur->isIndex
15b70 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
15b80 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  e;.      pCur->p
15b90 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20  Cursor = 0;.    
15ba0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
15bb0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
15bc0 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
15bd0 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  : {.      goto a
15be0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15bf0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
15c00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15c10 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
15c20 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
15c30 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
15c40 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
15c50 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
15c60 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
15c70 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
15c80 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
15c90 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
15ca0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
15cb0 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73  only.  The trans
15cc0 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a  ient or virtual.
15cd0 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
15ce0 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
15cf0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
15d00 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
15d10 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
15d20 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
15d30 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
15d40 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
15d50 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
15d60 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
15d70 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
15d80 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
15d90 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
15da0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
15db0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
15dc0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
15dd0 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
15de0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
15df0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
15e00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
15e10 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
15e20 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
15e30 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
15e40 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
15e50 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
15e60 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
15e70 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
15e80 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
15e90 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
15ea0 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
15eb0 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
15ec0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
15ed0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
15ee0 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
15ef0 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
15f00 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
15f10 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
15f20 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
15f30 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  idea..*/.case OP
15f40 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
15f50 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
15f60 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
15f70 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
15f80 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46   const int openF
15f90 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
15fa0 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
15fb0 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
15fc0 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
15fd0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
15fe0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
15ff0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
16000 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
16010 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
16020 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
16030 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
16040 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
16050 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c  cateCursor(p, i,
16060 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b 0a 20 20   pOp, -1, 1);.  
16070 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
16080 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
16090 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
160a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
160b0 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c 20  eFactory(db, 0, 
160c0 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  1, SQLITE_DEFAUL
160d0 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a  T_TEMP_CACHE_SIZ
160e0 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20  E, openFlags,.  
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e 70           &pCx->p
16110 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
16120 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
16130 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16140 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
16150 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  >pBt, 1);.  }.  
16160 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
16170 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
16180 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
16190 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
161a0 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
161b0 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
161c0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
161d0 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
161e0 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61 67  EE_ZERODATA flag
161f0 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
16200 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
16210 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
16220 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
16230 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
16240 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
16250 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
16260 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
16270 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  n INTKEY table).
16280 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
16290 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
162a0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
162b0 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
162c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
162d0 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
162e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
162f0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
16300 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
16310 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29   BTREE_ZERODATA)
16320 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
16330 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
16350 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
16360 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  1 );.        rc 
16370 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
16380 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
16390 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20  gno, 1, .       
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66           (KeyInf
163c0 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43  o*)pOp->p4.z, pC
163d0 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
163e0 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
163f0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
16400 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70  yInfo;.        p
16410 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
16420 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
16430 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
16440 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
16450 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16460 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16470 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
16480 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
16490 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
164a0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
164b0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
164c0 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
164d0 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73  Index = !pCx->is
164e0 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
164f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
16500 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 2a  enPseudo P1 P2 *
16510 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20   * *.**.** Open 
16520 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
16530 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
16540 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
16550 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
16560 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
16570 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   Any attempt to 
16580 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20 72  write a second r
16590 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73 65  ow of data cause
165a0 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 72  s the.** first r
165b0 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  ow to be deleted
165c0 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 64  .  All data is d
165d0 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
165e0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f  cursor is.** clo
165f0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65  sed..**.** A pse
16600 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
16610 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
16620 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 68   is useful for h
16630 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 45  olding the.** NE
16640 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73 20  W or OLD tables 
16650 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20 41  in a trigger.  A
16660 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
16670 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a   the a single.**
16680 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
16690 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
166a0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
166b0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
166c0 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
166d0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
166e0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
166f0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
16700 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78 65  OP_Insert is exe
16710 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74 20  cuted to insert 
16720 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65 20  a row in to the 
16730 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a 2a  pseudo table,.**
16740 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
16750 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72 20  e cursor may or 
16760 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74 27  may not make it'
16770 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74 68  s own copy of th
16780 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f  e.** original ro
16790 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69 73  w data. If P2 is
167a0 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73 65   0, then the pse
167b0 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20 63  udo-table will c
167c0 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  opy the.** origi
167d0 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f 74  nal row data. Ot
167e0 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e 74  herwise, a point
167f0 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e  er to the origin
16800 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a 2a  al memory cell.*
16810 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e 20  * is stored. In 
16820 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 76  this case, the v
16830 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  dbe program must
16840 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
16850 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   .** memory cell
16860 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
16870 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74 20  row data is not 
16880 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74 69  overwritten unti
16890 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f 20  l the.** pseudo 
168a0 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 20  table is closed 
168b0 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69 73  (or a new row is
168c0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 69   inserted into i
168d0 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  t)..*/.case OP_O
168e0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69  penPseudo: {.  i
168f0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
16900 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
16910 78 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  x;.  assert( i>=
16920 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
16930 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69  ocateCursor(p, i
16940 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20  , &pOp[-1], -1, 
16950 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
16960 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
16970 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
16980 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
16990 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  oTable = 1;.  pC
169a0 78 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  x->ephemPseudoTa
169b0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ble = pOp->p2;. 
169c0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
169d0 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  1;.  pCx->isInde
169e0 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  x = 0;.  break;.
169f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
16a00 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
16a10 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
16a20 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
16a30 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
16a40 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
16a50 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
16a60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
16a70 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
16a80 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
16a90 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
16aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
16ab0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
16ac0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
16ad0 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
16ae0 2d 3e 61 70 43 73 72 5b 69 5d 29 3b 0a 20 20 70  ->apCsr[i]);.  p
16af0 2d 3e 61 70 43 73 72 5b 69 5d 20 3d 20 30 3b 0a  ->apCsr[i] = 0;.
16b00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16b10 70 63 6f 64 65 3a 20 4d 6f 76 65 47 65 20 50 31  pcode: MoveGe P1
16b20 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
16b30 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
16b40 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
16b50 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
16b60 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
16b70 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
16b80 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
16b90 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
16ba0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
16bb0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
16bc0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
16bd0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
16be0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
16bf0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
16c00 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
16c10 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
16c20 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
16c30 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
16c40 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
16c50 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
16c60 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
16c70 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
16c80 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
16c90 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
16ca0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
16cb0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
16cc0 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
16cd0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
16ce0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
16cf0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
16d00 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
16d10 20 41 20 73 70 65 63 69 61 6c 20 66 65 61 74 75   A special featu
16d20 72 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  re of this opcod
16d30 65 20 28 61 6e 64 20 64 69 66 66 65 72 65 6e 74  e (and different
16d40 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 72 65 6c   from the.** rel
16d50 61 74 65 64 20 4f 50 5f 4d 6f 76 65 47 74 2c 20  ated OP_MoveGt, 
16d60 4f 50 5f 4d 6f 76 65 4c 74 2c 20 61 6e 64 20 4f  OP_MoveLt, and O
16d70 50 5f 4d 6f 76 65 4c 65 29 20 69 73 20 74 68 61  P_MoveLe) is tha
16d80 74 20 69 66 20 50 32 20 69 73 0a 2a 2a 20 7a 65  t if P2 is.** ze
16d90 72 6f 20 61 6e 64 20 50 31 20 69 73 20 61 6e 20  ro and P1 is an 
16da0 53 51 4c 20 74 61 62 6c 65 20 28 61 20 62 2d 74  SQL table (a b-t
16db0 72 65 65 20 77 69 74 68 20 69 6e 74 65 67 65 72  ree with integer
16dc0 20 6b 65 79 73 29 20 74 68 65 6e 0a 2a 2a 20 74   keys) then.** t
16dd0 68 65 20 73 65 65 6b 20 69 73 20 64 65 66 65 72  he seek is defer
16de0 72 65 64 20 75 6e 74 69 6c 20 69 74 20 69 73 20  red until it is 
16df0 61 63 74 75 61 6c 6c 79 20 6e 65 65 64 65 64 2e  actually needed.
16e00 20 20 49 74 20 6d 69 67 68 74 20 62 65 0a 2a 2a    It might be.**
16e10 20 74 68 65 20 63 61 73 65 20 74 68 61 74 20 74   the case that t
16e20 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 65 76  he cursor is nev
16e30 65 72 20 61 63 63 65 73 73 65 64 2e 20 20 42 79  er accessed.  By
16e40 20 64 65 66 65 72 72 69 6e 67 20 74 68 65 0a 2a   deferring the.*
16e50 2a 20 73 65 65 6b 2c 20 77 65 20 61 76 6f 69 64  * seek, we avoid
16e60 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65   unnecessary see
16e70 6b 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ks..**.** See al
16e80 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
16e90 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d  und, Distinct, M
16ea0 6f 76 65 4c 74 2c 20 4d 6f 76 65 47 74 2c 20 4d  oveLt, MoveGt, M
16eb0 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  oveLe.*/./* Opco
16ec0 64 65 3a 20 4d 6f 76 65 47 74 20 50 31 20 50 32  de: MoveGt P1 P2
16ed0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
16ee0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
16ef0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
16f00 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
16f10 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
16f20 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
16f30 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
16f40 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
16f50 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
16f60 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
16f70 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
16f80 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
16f90 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
16fa0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
16fb0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
16fc0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
16fd0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
16fe0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
16ff0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
17000 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
17010 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
17020 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
17030 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
17040 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
17050 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
17060 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
17070 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
17080 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
17090 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
170a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
170b0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
170c0 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c   Distinct, MoveL
170d0 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c  t, MoveGe, MoveL
170e0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
170f0 4d 6f 76 65 4c 74 20 50 31 20 50 32 20 50 33 20  MoveLt P1 P2 P3 
17100 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63  P4 * .**.** If c
17110 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
17120 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
17130 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
17140 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
17150 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74   .** use the int
17160 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
17170 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
17180 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
17190 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
171a0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
171b0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
171c0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
171d0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
171e0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
171f0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
17200 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
17210 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
17220 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
17230 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
17240 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
17250 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
17260 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
17270 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
17280 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
17290 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
172a0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
172b0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
172c0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
172d0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
172e0 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
172f0 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65 47 65 2c   MoveGt, MoveGe,
17300 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   MoveLe.*/./* Op
17310 63 6f 64 65 3a 20 4d 6f 76 65 4c 65 20 50 31 20  code: MoveLe P1 
17320 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
17330 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
17340 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
17350 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
17360 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
17370 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
17380 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
17390 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
173a0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
173b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
173c0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
173d0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
173e0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
173f0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
17400 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
17410 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
17420 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
17430 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
17440 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
17450 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
17460 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
17470 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
17480 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
17490 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
174a0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
174b0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
174c0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
174d0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
174e0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
174f0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
17500 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
17510 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
17520 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76  d, Distinct, Mov
17530 65 47 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76  eGt, MoveGe, Mov
17540 65 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  eLt.*/.case OP_M
17550 6f 76 65 4c 74 3a 20 20 20 20 20 20 20 20 20 2f  oveLt:         /
17560 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
17570 61 73 65 20 4f 50 5f 4d 6f 76 65 4c 65 3a 20 20  ase OP_MoveLe:  
17580 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
17590 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  in3 */.case OP_M
175a0 6f 76 65 47 65 3a 20 20 20 20 20 20 20 20 20 2f  oveGe:         /
175b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
175c0 61 73 65 20 4f 50 5f 4d 6f 76 65 47 74 3a 20 7b  ase OP_MoveGt: {
175d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
175e0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
175f0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
17600 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
17610 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
17620 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
17630 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
17640 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
17650 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
17660 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20  pCursor!=0 ){.  
17670 20 20 69 6e 74 20 72 65 73 2c 20 6f 63 3b 0a 20    int res, oc;. 
17680 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63     oc = pOp->opc
17690 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  ode;.    pC->nul
176a0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66  lRow = 0;.    if
176b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
176c0 0a 20 20 20 20 20 20 69 36 34 20 69 4b 65 79 20  .      i64 iKey 
176d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
176e0 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
176f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
17700 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
17710 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
17720 3d 3d 4f 50 5f 4d 6f 76 65 47 65 20 29 3b 0a 20  ==OP_MoveGe );. 
17730 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74         pC->movet
17740 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 0a  oTarget = iKey;.
17750 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
17760 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
17770 20 20 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72        pC->deferr
17780 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
17790 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
177a0 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20     }.      rc = 
177b0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
177c0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
177d0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
177e0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
177f0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17800 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17810 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
17820 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17830 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61    }.      pC->la
17840 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
17850 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
17860 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 3b  sValid = res==0;
17870 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17880 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
17890 20 72 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 46   r;.      int nF
178a0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
178b0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
178c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
178d0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61  INT32 );.      a
178e0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
178f0 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  );.      r.pKeyI
17900 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
17910 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
17920 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20  ld = nField;.   
17930 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 4d 6f     if( oc==OP_Mo
17940 76 65 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d  veGt || oc==OP_M
17950 6f 76 65 4c 65 20 29 7b 0a 20 20 20 20 20 20 20  oveLe ){.       
17960 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
17970 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
17980 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17990 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
179a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61       }.      r.a
179b0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
179c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72  Op->p3];.      r
179d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
179e0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
179f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
17a00 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
17a10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17a20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17a30 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17a40 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
17a50 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
17a60 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
17a70 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
17a80 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
17a90 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
17aa0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
17ab0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
17ac0 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
17ad0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
17ae0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
17af0 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 65 20 7c 7c  oc==OP_MoveGe ||
17b00 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20 29   oc==OP_MoveGt )
17b10 7b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c  {.      if( res<
17b20 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
17b30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
17b40 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
17b50 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
17b60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17b70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17b80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17b90 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
17ba0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
17bb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
17bc0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  es = 0;.      }.
17bd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17be0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
17bf0 4d 6f 76 65 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  MoveLt || oc==OP
17c00 5f 4d 6f 76 65 4c 65 20 29 3b 0a 20 20 20 20 20  _MoveLe );.     
17c10 20 69 66 28 20 72 65 73 3e 3d 30 20 29 7b 0a 20   if( res>=0 ){. 
17c20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17c30 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
17c40 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
17c50 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
17c60 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17c70 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17c80 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17c90 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
17ca0 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
17cb0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
17cc0 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
17cd0 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
17ce0 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
17cf0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
17d00 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
17d10 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
17d20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
17d30 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
17d40 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75  BtreeEof(pC->pCu
17d50 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
17d60 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
17d70 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
17d80 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
17d90 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
17da0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  - 1;.    }.  }el
17db0 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75  se if( !pC->pseu
17dc0 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  doTable ){.    /
17dd0 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
17de0 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
17df0 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
17e00 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
17e10 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
17e20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
17e30 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
17e40 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
17e50 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
17e60 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
17e70 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
17e80 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
17e90 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
17ea0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17eb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17ec0 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
17ed0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
17ee0 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68 6f  * Register P3 ho
17ef0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
17f00 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
17f10 63 6f 72 64 2e 20 20 50 31 20 69 73 20 61 6e 20  cord.  P1 is an 
17f20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e 20  index..** If an 
17f30 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63 68  entry that match
17f40 65 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  es the value in 
17f50 72 65 67 69 73 74 65 72 20 70 33 20 65 78 69 73  register p3 exis
17f60 74 73 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a 2a  ts in P1 then.**
17f70 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66   jump to P2.  If
17f80 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 64 6f   the P3 value do
17f90 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
17fa0 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a 20   entry in P1.** 
17fb0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20  then fall thru. 
17fc0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   The P1 cursor i
17fd0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
17fe0 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
17ff0 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74 20 65  entry.** if it e
18000 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  xists..**.** Thi
18010 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
18020 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
18030 6e 74 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74  nt the IN operat
18040 6f 72 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20  or where the.** 
18050 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 69  left-hand side i
18060 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  s a SELECT state
18070 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79 20 62 65  ment.  P1 may be
18080 20 61 20 74 72 75 65 20 69 6e 64 65 78 2c 20 6f   a true index, o
18090 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20 61  r it.** may be a
180a0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
180b0 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
180c0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53  results of the S
180d0 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d 65  ELECT.** stateme
180e0 6e 74 2e 20 20 20 54 68 69 73 20 69 6e 73 74 72  nt.   This instr
180f0 75 63 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20 75  uction is also u
18100 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
18110 20 74 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43 54   the.** DISTINCT
18120 20 6b 65 79 77 6f 72 64 20 69 6e 20 53 45 4c 45   keyword in SELE
18130 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  CT statements..*
18140 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
18150 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20  ction checks if 
18160 69 6e 64 65 78 20 50 31 20 63 6f 6e 74 61 69 6e  index P1 contain
18170 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72 20 77  s a record for w
18180 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 66 69 72  hich .** the fir
18190 73 74 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20  st N serialized 
181a0 76 61 6c 75 65 73 20 65 78 61 63 74 6c 79 20 6d  values exactly m
181b0 61 74 63 68 20 74 68 65 20 4e 20 73 65 72 69 61  atch the N seria
181c0 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a 20  lized values.** 
181d0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6e  in the record in
181e0 20 72 65 67 69 73 74 65 72 20 50 33 2c 20 77 68   register P3, wh
181f0 65 72 65 20 4e 20 69 73 20 74 68 65 20 74 6f 74  ere N is the tot
18200 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  al number of val
18210 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50 33  ues in.** the P3
18220 20 72 65 63 6f 72 64 20 28 74 68 65 20 50 33 20   record (the P3 
18230 72 65 63 6f 72 64 20 69 73 20 61 20 70 72 65 66  record is a pref
18240 69 78 20 6f 66 20 74 68 65 20 50 31 20 72 65 63  ix of the P1 rec
18250 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65 65  ord). .**.** See
18260 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
18270 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45 78   IsUnique, NotEx
18280 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ists.*/./* Opcod
18290 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
182a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
182b0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
182c0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
182d0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
182e0 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e 20  d.  P1 is.** an 
182f0 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f 20 65 6e  index.  If no en
18300 74 72 79 20 65 78 69 73 74 73 20 69 6e 20 50 31  try exists in P1
18310 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68   that matches th
18320 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d 70  e blob then jump
18330 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49 66 20 61  .** to P2.  If a
18340 6e 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78 69  n entry does exi
18350 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72 6f  sting, fall thro
18360 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72  ugh.  The cursor
18370 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69 6e   is left.** poin
18380 74 69 6e 67 20 74 6f 20 74 68 65 20 65 6e 74 72  ting to the entr
18390 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 2e 0a  y that matches..
183a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
183b0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
183c0 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
183d0 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
183e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
183f0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
18400 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
18410 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
18420 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
18430 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
18440 69 73 74 73 20 3d 20 30 3b 0a 20 20 56 64 62 65  ists = 0;.  Vdbe
18450 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
18460 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
18470 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
18480 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
18490 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
184a0 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
184b0 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  ])->pCursor!=0 )
184c0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
184d0 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72     UnpackedRecor
184e0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 0a 20 20 20  d *pIdxKey;..   
184f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
18500 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61  able==0 );.    a
18510 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
18520 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
18530 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
18540 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
18550 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
18560 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
18570 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20  n3->z,.         
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
185a0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
185b0 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69 66  empRec));.    if
185c0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a  ( pIdxKey==0 ){.
185d0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
185e0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  m;.    }.    if(
185f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
18600 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20 20  _Found ){.      
18610 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
18620 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
18630 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
18640 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18650 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
18660 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
18670 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
18680 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  res);.    sqlite
18690 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63  3VdbeDeleteUnpac
186a0 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65  kedRecord(pIdxKe
186b0 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  y);.    if( rc!=
186c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
186d0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
186e0 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
186f0 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
18700 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
18710 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
18720 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
18730 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
18740 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
18750 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
18760 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
18770 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
18780 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
18790 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
187a0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
187b0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
187c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
187d0 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
187e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
187f0 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67  **.** The P3 reg
18800 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  ister contains a
18810 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  n integer record
18820 20 6e 75 6d 62 65 72 2e 20 20 43 61 6c 6c 20 74   number.  Call t
18830 68 69 73 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75  his.** record nu
18840 6d 62 65 72 20 52 2e 20 20 54 68 65 20 50 34 20  mber R.  The P4 
18850 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e  register contain
18860 73 20 61 6e 20 69 6e 64 65 78 20 6b 65 79 20 63  s an index key c
18870 72 65 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  reated.** using 
18880 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 43 61 6c  MakeRecord.  Cal
18890 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50 31  l it K..**.** P1
188a0 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 20 20 53   is an index.  S
188b0 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74 61  o it has no data
188c0 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f 6e   and its key con
188d0 73 69 73 74 73 20 6f 66 20 61 0a 2a 2a 20 72 65  sists of a.** re
188e0 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64 20 62  cord generated b
188f0 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  y OP_MakeRecord 
18900 77 68 65 72 65 20 74 68 65 20 6c 61 73 74 20 66  where the last f
18910 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a 20  ield is the .** 
18920 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65 6e 74  rowid of the ent
18930 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64 65  ry that the inde
18940 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 20  x refers to..** 
18950 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
18960 74 69 6f 6e 20 61 73 6b 73 20 69 66 20 74 68 65  tion asks if the
18970 72 65 20 69 73 20 61 6e 20 65 6e 74 72 79 20 69  re is an entry i
18980 6e 20 50 31 20 77 68 65 72 65 20 74 68 65 0a 2a  n P1 where the.*
18990 2a 20 66 69 65 6c 64 73 20 6d 61 74 63 68 65 73  * fields matches
189a0 20 4b 20 62 75 74 20 74 68 65 20 72 6f 77 69 64   K but the rowid
189b0 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
189c0 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20 74 68 65 72  om R..** If ther
189d0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74  e is no such ent
189e0 72 79 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ry, then there i
189f0 73 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 2a  s an immediate.*
18a00 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
18a10 66 20 61 6e 79 20 65 6e 74 72 79 20 64 6f 65 73  f any entry does
18a20 20 65 78 69 73 74 20 77 68 65 72 65 20 74 68 65   exist where the
18a30 20 69 6e 64 65 78 20 73 74 72 69 6e 67 0a 2a 2a   index string.**
18a40 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20 74   matches K but t
18a50 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
18a60 20 69 73 20 6e 6f 74 20 52 2c 20 74 68 65 6e 20   is not R, then 
18a70 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 6e 75  the record.** nu
18a80 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 65 6e  mber for that en
18a90 74 72 79 20 69 73 20 77 72 69 74 74 65 6e 20 69  try is written i
18aa0 6e 74 6f 20 50 33 20 61 6e 64 20 63 6f 6e 74 72  nto P3 and contr
18ab0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
18ac0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
18ad0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
18ae0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
18af0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
18b00 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20  , Found.*/.case 
18b10 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20  OP_IsUnique: {  
18b20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
18b30 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  n3 */.  int i = 
18b40 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
18b50 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74  ursor *pCx;.  Bt
18b60 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
18b70 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34 20   Mem *pK;.  i64 
18b80 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68 65  R;..  /* Pop the
18b90 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68 65   value R off the
18ba0 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63   top of the stac
18bb0 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  k.  */.  assert(
18bc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18bd0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
18be0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
18bf0 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
18c00 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d 20  >nMem );.  pK = 
18c10 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34  &p->aMem[pOp->p4
18c20 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  .i];.  sqlite3Vd
18c30 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
18c40 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49 6e  pIn3);.  R = pIn
18c50 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74  3->u.i;.  assert
18c60 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
18c70 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78 20  Cursor );.  pCx 
18c80 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
18c90 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30 20   assert( pCx!=0 
18ca0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78  );.  pCrsr = pCx
18cb0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
18cc0 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
18cd0 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69 36   int res;.    i6
18ce0 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
18cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18d00 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74 68  record number th
18d10 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f 0a  at matches K */.
18d20 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
18d30 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20 2f  rd *pIdxKey;   /
18d40 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73 69  * Unpacked versi
18d50 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20 20  on of P4 */..   
18d60 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b 20   /* Make sure K 
18d70 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64 20  is a string and 
18d80 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74 20  make zKey point 
18d90 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20 20  to K.    */.    
18da0 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61 67  assert( pK->flag
18db0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
18dc0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
18dd0 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
18de0 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79 49  npack(pCx->pKeyI
18df0 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d 3e  nfo, pK->n, pK->
18e00 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  z,.             
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65           aTempRe
18e30 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
18e40 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49  ec));.    if( pI
18e50 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20  dxKey==0 ){.    
18e60 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
18e70 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
18e80 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
18e90 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44  KED_IGNORE_ROWID
18ea0 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
18eb0 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69 6e   for an entry in
18ec0 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75   P1 where all bu
18ed0 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69 64  t the last rowid
18ee0 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a 20   match K.    ** 
18ef0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
18f00 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70 20  uch entry, jump 
18f10 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
18f20 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  2..    */.    as
18f30 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72  sert( pCx->defer
18f40 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
18f50 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74      pCx->cacheSt
18f60 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
18f70 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  LE;.    rc = sql
18f80 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
18f90 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 70  npacked(pCrsr, p
18fa0 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
18fb0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
18fc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18fd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
18fe0 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
18ff0 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
19000 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19010 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19020 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30   }.    if( res<0
19030 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
19040 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
19050 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
19060 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
19070 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
19080 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
19090 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
190a0 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  teUnpackedRecord
190b0 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20  (pIdxKey);.     
190c0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
190d0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  }.    }.    rc =
190e0 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
190f0 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20 70  eyCompare(pCx, p
19100 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20 0a  IdxKey, &res); .
19110 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
19120 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
19130 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
19140 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19150 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
19160 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19170 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
19180 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
19190 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
191a0 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
191b0 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  /* At this point
191c0 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e 74  , pCrsr is point
191d0 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79 20  ing to an entry 
191e0 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20  in P1 where all 
191f0 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66  but.    ** the f
19200 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65 20  inal entry (the 
19210 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20 4b  rowid) matches K
19220 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
19230 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66 69  if the.    ** fi
19240 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  nal rowid column
19250 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
19260 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71 75  om R.  If it equ
19270 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70 0a  als R then jump.
19280 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
19290 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f  ly to P2..    */
192a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
192b0 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43  3VdbeIdxRowid(pC
192c0 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 66  rsr, &v);.    if
192d0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
192e0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
192f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19300 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19310 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63  v==R ){.      pc
19320 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
19330 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
19340 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   }..    /* The f
19350 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20 74  inal varint of t
19360 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65 72  he key is differ
19370 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74 6f  ent from R.  Sto
19380 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20 2a  re it back.    *
19390 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  * into register 
193a0 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72 64  R3.  (The record
193b0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65 6e   number of an en
193c0 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74 65  try that violate
193d0 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51 55  s.    ** a UNIQU
193e0 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a 20  E constraint.). 
193f0 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d 3e     */.    pIn3->
19400 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73 73  u.i = v;.    ass
19410 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
19420 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d 0a  &MEM_Int );.  }.
19430 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19440 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
19450 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
19460 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  .** Use the cont
19470 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
19480 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20  P3 as a integer 
19490 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72  key.  If a recor
194a0 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  d .** with that 
194b0 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  key does not exi
194c0 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50  st in table of P
194d0 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  1, then jump to 
194e0 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
194f0 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74  ecord does exist
19500 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75  , then fall thru
19510 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  .  The cursor is
19520 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69   left .** pointi
19530 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64  ng to the record
19540 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
19550 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
19560 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73  nce between this
19570 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e   operation and N
19580 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20  otFound is that 
19590 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
195a0 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65  n assumes the ke
195b0 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  y is an integer 
195c0 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61  and that P1 is a
195d0 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a   table whereas.*
195e0 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d  * NotFound assum
195f0 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62  es key is a blob
19600 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f   constructed fro
19610 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64  m MakeRecord and
19620 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64  .** P1 is an ind
19630 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ex..**.** See al
19640 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
19650 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  und, IsUnique.*/
19660 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
19670 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ts: {        /* 
19680 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
19690 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
196a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
196b0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
196c0 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20 69  rsr;.  assert( i
196d0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
196e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
196f0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
19700 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
19710 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
19720 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
19730 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  0 ){.    int res
19740 3b 0a 20 20 20 20 75 36 34 20 69 4b 65 79 3b 0a  ;.    u64 iKey;.
19750 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
19760 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
19770 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
19780 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73   p->apCsr[i]->is
19790 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65  Table );.    iKe
197a0 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e  y = intToKey(pIn
197b0 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 72 63 20  3->u.i);.    rc 
197c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
197d0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
197e0 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 26  sr, 0, iKey, 0,&
197f0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
19800 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
19810 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
19820 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
19830 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  =0;.    pC->null
19840 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
19850 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
19860 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
19870 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
19880 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 66  uninitialized if
19890 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 2e 20   rc!=SQLITE_OK. 
198a0 20 42 75 74 20 69 66 20 72 63 21 3d 53 51 4c 49   But if rc!=SQLI
198b0 54 45 5f 4f 4b 0a 20 20 20 20 2a 2a 20 70 72 6f  TE_OK.    ** pro
198c0 63 65 73 73 69 6e 67 20 69 73 20 61 62 6f 75 74  cessing is about
198d0 20 74 6f 20 61 62 6f 72 74 20 73 6f 20 77 65 20   to abort so we 
198e0 72 65 61 6c 6c 79 20 64 6f 20 6e 6f 74 20 63 61  really do not ca
198f0 72 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  re whether or no
19900 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6f 6c  t.    ** the fol
19910 6c 6f 77 69 6e 67 20 6a 75 6d 70 20 69 73 20 74  lowing jump is t
19920 61 6b 65 6e 2e 20 20 28 49 6e 20 6f 74 68 65 72  aken.  (In other
19930 20 77 6f 72 64 73 2c 20 64 6f 20 6e 6f 74 20 73   words, do not s
19940 74 72 65 73 73 20 6f 76 65 72 0a 20 20 20 20 2a  tress over.    *
19950 2a 20 74 68 65 20 65 72 72 6f 72 20 74 68 61 74  * the error that
19960 20 76 61 6c 67 72 69 6e 64 20 73 6f 6d 65 74 69   valgrind someti
19970 6d 65 73 20 73 68 6f 77 73 20 6f 6e 20 74 68 65  mes shows on the
19980 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20   next statement 
19990 77 68 65 6e 0a 20 20 20 20 2a 2a 20 72 75 6e 6e  when.    ** runn
199a0 69 6e 67 20 69 6f 65 72 72 2e 74 65 73 74 20 61  ing ioerr.test a
199b0 6e 64 20 73 69 6d 69 6c 61 72 20 66 61 69 6c 75  nd similar failu
199c0 72 65 2d 72 65 63 6f 76 65 72 79 20 74 65 73 74  re-recovery test
199d0 20 73 63 72 69 70 74 73 2e 29 20 2a 2f 0a 20 20   scripts.) */.  
199e0 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
199f0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
19a00 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73  p2 - 1;.      as
19a10 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
19a20 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
19a30 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 21   }.  }else if( !
19a40 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
19a50 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
19a60 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61  appens when an a
19a70 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61  ttempt to open a
19a80 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20   read cursor on 
19a90 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69  the .    ** sqli
19aa0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
19ab0 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
19ac0 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  MPTY..    */.   
19ad0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
19ae0 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 63 20 3d  able );.    pc =
19af0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
19b00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
19b10 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
19b20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
19b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
19b40 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
19b50 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
19b60 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
19b70 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
19b80 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
19b90 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
19ba0 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
19bb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
19bc0 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
19bd0 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
19be0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
19bf0 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
19c00 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
19c10 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
19c20 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
19c30 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
19c40 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  e */.  int i = p
19c50 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
19c60 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
19c70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
19c80 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
19c90 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
19ca0 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d  i = p->apCsr[i]-
19cb0 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d  >seqCount++;.  M
19cc0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
19cd0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
19ce0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
19cf0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
19d00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
19d10 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
19d20 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
19d30 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
19d40 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
19d50 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
19d60 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
19d70 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
19d80 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
19d90 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
19da0 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
19db0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
19dc0 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
19dd0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
19de0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
19df0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
19e00 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
19e10 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
19e20 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
19e30 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  s the largest pr
19e40 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65  eviously.** gene
19e50 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
19e60 62 65 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63  ber.  No new rec
19e70 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20  ord numbers are 
19e80 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
19e90 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73 20  ss.** than this 
19ea0 76 61 6c 75 65 2e 20 20 57 68 65 6e 20 74 68 69  value.  When thi
19eb0 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
19ec0 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53  its maximum, a S
19ed0 51 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72  QLITE_FULL.** er
19ee0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
19ef0 2e 20 20 54 68 65 20 50 33 20 72 65 67 69 73 74  .  The P3 regist
19f00 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
19f10 74 68 20 74 68 65 20 67 65 6e 65 72 61 74 65 64  th the generated
19f20 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  .** record numbe
19f30 72 2e 20 20 54 68 69 73 20 50 33 20 6d 65 63 68  r.  This P3 mech
19f40 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
19f50 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
19f60 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
19f70 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
19f80 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
19f90 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
19fa0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
19fb0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  e */.  int i = p
19fc0 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20 76 20  Op->p1;.  i64 v 
19fd0 3d 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  = 0;.  VdbeCurso
19fe0 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
19ff0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1a000 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1a010 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
1a020 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d  0 );.  if( (pC =
1a030 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
1a040 43 75 72 73 6f 72 3d 3d 30 20 29 7b 0a 20 20 20  Cursor==0 ){.   
1a050 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
1a060 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
1a070 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
1a080 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
1a090 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
1a0a0 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
1a0b0 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
1a0c0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
1a0d0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
1a0e0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
1a0f0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
1a100 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
1a110 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
1a120 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
1a130 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
1a140 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
1a150 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
1a160 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
1a170 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
1a180 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
1a190 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
1a1a0 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
1a1b0 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
1a1c0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
1a1d0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
1a1e0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
1a1f0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
1a200 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
1a210 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
1a220 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
1a230 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
1a240 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
1a250 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
1a260 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
1a270 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
1a280 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
1a290 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
1a2a0 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
1a2b0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
1a2c0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
1a2d0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
1a2e0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
1a2f0 2c 20 75 70 20 74 6f 20 31 30 30 30 20 74 69 6d  , up to 1000 tim
1a300 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  es..    **.    *
1a310 2a 20 46 6f 72 20 61 20 74 61 62 6c 65 20 77 69  * For a table wi
1a320 74 68 20 6c 65 73 73 20 74 68 61 6e 20 32 20 62  th less than 2 b
1a330 69 6c 6c 69 6f 6e 20 65 6e 74 72 69 65 73 2c 20  illion entries, 
1a340 74 68 65 20 70 72 6f 62 61 62 69 6c 69 74 79 0a  the probability.
1a350 20 20 20 20 2a 2a 20 6f 66 20 6e 6f 74 20 66 69      ** of not fi
1a360 6e 64 69 6e 67 20 61 20 75 6e 75 73 65 64 20 72  nding a unused r
1a370 6f 77 69 64 20 69 73 20 61 62 6f 75 74 20 31 2e  owid is about 1.
1a380 30 65 2d 33 30 30 2e 20 20 54 68 69 73 20 69 73  0e-300.  This is
1a390 20 61 20 0a 20 20 20 20 2a 2a 20 6e 6f 6e 2d 7a   a .    ** non-z
1a3a0 65 72 6f 20 70 72 6f 62 61 62 69 6c 69 74 79 2c  ero probability,
1a3b0 20 62 75 74 20 69 74 20 69 73 20 73 74 69 6c 6c   but it is still
1a3c0 20 76 61 6e 69 73 68 69 6e 67 6c 79 20 73 6d 61   vanishingly sma
1a3d0 6c 6c 20 61 6e 64 20 73 68 6f 75 6c 64 0a 20 20  ll and should.  
1a3e0 20 20 2a 2a 20 6e 65 76 65 72 20 63 61 75 73 65    ** never cause
1a3f0 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20 59 6f 75   a problem.  You
1a400 20 61 72 65 20 6d 75 63 68 2c 20 6d 75 63 68 20   are much, much 
1a410 6d 6f 72 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68  more likely to h
1a420 61 76 65 20 61 0a 20 20 20 20 2a 2a 20 68 61 72  ave a.    ** har
1a430 64 77 61 72 65 20 66 61 69 6c 75 72 65 20 74 68  dware failure th
1a440 61 6e 20 66 6f 72 20 74 68 69 73 20 61 6c 67 6f  an for this algo
1a450 72 69 74 68 6d 20 74 6f 20 66 61 69 6c 2e 0a 20  rithm to fail.. 
1a460 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1a470 20 61 6e 61 6c 79 73 69 73 20 69 6e 20 74 68 65   analysis in the
1a480 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
1a490 61 70 68 20 61 73 73 75 6d 65 73 20 74 68 61 74  aph assumes that
1a4a0 20 79 6f 75 20 68 61 76 65 20 61 20 67 6f 6f 64   you have a good
1a4b0 0a 20 20 20 20 2a 2a 20 73 6f 75 72 63 65 20 6f  .    ** source o
1a4c0 66 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73  f random numbers
1a4d0 2e 20 20 49 73 20 61 20 6c 69 62 72 61 72 79 20  .  Is a library 
1a4e0 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 20 6c 72  function like lr
1a4f0 61 6e 64 34 38 28 29 0a 20 20 20 20 2a 2a 20 67  and48().    ** g
1a500 6f 6f 64 20 65 6e 6f 75 67 68 3f 20 20 4d 61 79  ood enough?  May
1a510 62 65 2e 20 4d 61 79 62 65 20 6e 6f 74 2e 20 49  be. Maybe not. I
1a520 74 27 73 20 68 61 72 64 20 74 6f 20 6b 6e 6f 77  t's hard to know
1a530 20 77 68 65 74 68 65 72 20 74 68 65 72 65 0a 20   whether there. 
1a540 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 73     ** might be s
1a550 75 62 74 6c 65 20 62 75 67 73 20 69 73 20 73 6f  ubtle bugs is so
1a560 6d 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  me implementatio
1a570 6e 73 20 6f 66 20 6c 72 61 6e 64 34 38 28 29 20  ns of lrand48() 
1a580 74 68 61 74 0a 20 20 20 20 2a 2a 20 63 6f 75 6c  that.    ** coul
1a590 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73  d cause problems
1a5a0 2e 20 54 6f 20 61 76 6f 69 64 20 75 6e 63 65 72  . To avoid uncer
1a5b0 74 61 69 6e 74 79 2c 20 53 51 4c 69 74 65 20 75  tainty, SQLite u
1a5c0 73 65 73 20 69 74 73 20 6f 77 6e 20 0a 20 20 20  ses its own .   
1a5d0 20 2a 2a 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65   ** random numbe
1a5e0 72 20 67 65 6e 65 72 61 74 6f 72 20 62 61 73 65  r generator base
1a5f0 64 20 6f 6e 20 74 68 65 20 52 43 34 20 61 6c 67  d on the RC4 alg
1a600 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
1a610 20 20 20 2a 2a 20 54 6f 20 70 72 6f 6d 6f 74 65     ** To promote
1a620 20 6c 6f 63 61 6c 69 74 79 20 6f 66 20 72 65 66   locality of ref
1a630 65 72 65 6e 63 65 20 66 6f 72 20 72 65 70 65 74  erence for repet
1a640 69 74 69 76 65 20 69 6e 73 65 72 74 73 2c 20 74  itive inserts, t
1a650 68 65 0a 20 20 20 20 2a 2a 20 66 69 72 73 74 20  he.    ** first 
1a660 66 65 77 20 61 74 74 65 6d 70 74 73 20 61 74 20  few attempts at 
1a670 63 68 6f 6f 73 69 6e 67 20 61 20 72 61 6e 64 6f  choosing a rando
1a680 6d 20 72 6f 77 69 64 20 70 69 63 6b 20 76 61 6c  m rowid pick val
1a690 75 65 73 20 6a 75 73 74 20 61 20 6c 69 74 74 6c  ues just a littl
1a6a0 65 0a 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20  e.    ** larger 
1a6b0 74 68 61 6e 20 74 68 65 20 70 72 65 76 69 6f 75  than the previou
1a6c0 73 20 72 6f 77 69 64 2e 20 20 54 68 69 73 20 68  s rowid.  This h
1a6d0 61 73 20 62 65 65 6e 20 73 68 6f 77 6e 20 65 78  as been shown ex
1a6e0 70 65 72 69 6d 65 6e 74 61 6c 6c 79 0a 20 20 20  perimentally.   
1a6f0 20 2a 2a 20 74 6f 20 64 6f 75 62 6c 65 20 74 68   ** to double th
1a700 65 20 73 70 65 65 64 20 6f 66 20 74 68 65 20 43  e speed of the C
1a710 4f 50 59 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20  OPY operation.. 
1a720 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65     */.    int re
1a730 73 2c 20 72 78 3d 53 51 4c 49 54 45 5f 4f 4b 2c  s, rx=SQLITE_OK,
1a740 20 63 6e 74 3b 0a 20 20 20 20 69 36 34 20 78 3b   cnt;.    i64 x;
1a750 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20  .    cnt = 0;.  
1a760 20 20 69 66 28 20 28 73 71 6c 69 74 65 33 42 74    if( (sqlite3Bt
1a770 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75  reeFlags(pC->pCu
1a780 72 73 6f 72 29 26 28 42 54 52 45 45 5f 49 4e 54  rsor)&(BTREE_INT
1a790 4b 45 59 7c 42 54 52 45 45 5f 5a 45 52 4f 44 41  KEY|BTREE_ZERODA
1a7a0 54 41 29 29 20 21 3d 0a 20 20 20 20 20 20 20 20  TA)) !=.        
1a7b0 20 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 29    BTREE_INTKEY )
1a7c0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1a7d0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1a7e0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1a7f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a800 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1a810 74 28 20 28 73 71 6c 69 74 65 33 42 74 72 65 65  t( (sqlite3Btree
1a820 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f  Flags(pC->pCurso
1a830 72 29 20 26 20 42 54 52 45 45 5f 49 4e 54 4b 45  r) & BTREE_INTKE
1a840 59 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  Y)!=0 );.    ass
1a850 65 72 74 28 20 28 73 71 6c 69 74 65 33 42 74 72  ert( (sqlite3Btr
1a860 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72  eeFlags(pC->pCur
1a870 73 6f 72 29 20 26 20 42 54 52 45 45 5f 5a 45 52  sor) & BTREE_ZER
1a880 4f 44 41 54 41 29 3d 3d 30 20 29 3b 0a 0a 23 69  ODATA)==0 );..#i
1a890 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
1a8a0 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
1a8b0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
1a8c0 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
1a8d0 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
1a8e0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1a8f0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
1a900 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
1a910 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
1a920 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
1a930 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
1a940 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
1a950 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1a960 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
1a970 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
1a980 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
1a990 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
1a9a0 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
1a9b0 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
1a9c0 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
1a9d0 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
1a9e0 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
1a9f0 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
1aa00 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
1aa10 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1aa20 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43   ){.      if( pC
1aa30 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64  ->nextRowidValid
1aa40 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
1aa50 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 3b 0a 20  pC->nextRowid;. 
1aa60 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1aa70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1aa80 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1aa90 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1aaa0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1aab0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1aac0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1aad0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1aae0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1aaf0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1ab00 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20       v = 1;.    
1ab10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ab20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1ab30 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1ab40 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1ab50 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e       v = keyToIn
1ab60 74 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  t(v);.          
1ab70 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44  if( v==MAX_ROWID
1ab80 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1ab90 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1aba0 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1abb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1abc0 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20       v++;.      
1abd0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1abe0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1abf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1ac00 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1ac10 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1ac20 20 20 20 20 20 20 20 20 4d 65 6d 20 2a 70 4d 65          Mem *pMe
1ac30 6d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  m;.        asser
1ac40 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
1ac50 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
1ac60 20 29 3b 20 2f 2a 20 50 33 20 69 73 20 61 20 76   ); /* P3 is a v
1ac70 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1ac80 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   */.        pMem
1ac90 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1aca0 3e 70 33 5d 3b 0a 09 52 45 47 49 53 54 45 52 5f  >p3];..REGISTER_
1acb0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1acc0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1acd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1ace0 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1acf0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1ad00 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1ad10 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1ad20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1ad30 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1ad40 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1ad50 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1ad60 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1ad70 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1ad80 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1ad90 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1ada0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1adb0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1adc0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1add0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1ade0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1adf0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1ae00 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1ae10 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1ae20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1ae30 69 66 28 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20  if( v<MAX_ROWID 
1ae40 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e  ){.        pC->n
1ae50 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20  extRowidValid = 
1ae60 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e  1;.        pC->n
1ae70 65 78 74 52 6f 77 69 64 20 3d 20 76 2b 31 3b 0a  extRowid = v+1;.
1ae80 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1ae90 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
1aea0 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  idValid = 0;.   
1aeb0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
1aec0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
1aed0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 61  Rowid ){.      a
1aee0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1aef0 30 20 29 3b 20 20 2f 2a 20 53 51 4c 49 54 45 5f  0 );  /* SQLITE_
1af00 46 55 4c 4c 20 6d 75 73 74 20 68 61 76 65 20 6f  FULL must have o
1af10 63 63 75 72 72 65 64 20 70 72 69 6f 72 20 74 6f  ccurred prior to
1af20 20 74 68 69 73 20 2a 2f 0a 20 20 20 20 20 20 76   this */.      v
1af30 20 3d 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52   = db->priorNewR
1af40 6f 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20  owid;.      cnt 
1af50 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
1af60 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d         if( cnt==
1af70 30 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66  0 && (v&0xffffff
1af80 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20  )==v ){.        
1af90 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d    v++;.        }
1afa0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1afb0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
1afc0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
1afd0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1afe0 20 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78   cnt<5 ) v &= 0x
1aff0 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20  ffffff;.        
1b000 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3d  }.        if( v=
1b010 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
1b020 20 20 20 20 20 20 20 78 20 3d 20 69 6e 74 54 6f         x = intTo
1b030 4b 65 79 28 76 29 3b 0a 20 20 20 20 20 20 20 20  Key(v);.        
1b040 72 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rx = sqlite3Btre
1b050 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1b060 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1b070 28 75 36 34 29 78 2c 20 30 2c 20 26 72 65 73 29  (u64)x, 0, &res)
1b080 3b 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b  ;.        cnt++;
1b090 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 63  .      }while( c
1b0a0 6e 74 3c 31 30 30 20 26 26 20 72 78 3d 3d 53 51  nt<100 && rx==SQ
1b0b0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
1b0c0 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70  0 );.      db->p
1b0d0 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20 76  riorNewRowid = v
1b0e0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 78 3d 3d  ;.      if( rx==
1b0f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1b100 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
1b110 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
1b120 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1b130 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b140 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1b150 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1b160 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1b170 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1b180 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1b190 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1b1a0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d  E_STALE;.  }.  M
1b1b0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1b1c0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1b1d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
1b1e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b1f0 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
1b200 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
1b210 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
1b220 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
1b230 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
1b240 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
1b250 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
1b260 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
1b270 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
1b280 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
1b290 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
1b2a0 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
1b2b0 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
1b2c0 20 73 74 6f 72 65 64 20 72 65 67 69 73 74 65 72   stored register
1b2d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
1b2e0 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
1b2f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
1b300 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
1b310 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   be an integer..
1b320 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1b330 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
1b340 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
1b350 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
1b360 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
1b370 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
1b380 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
1b390 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
1b3a0 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
1b3b0 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
1b3c0 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
1b3d0 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
1b3e0 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
1b3f0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
1b400 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
1b410 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
1b420 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
1b430 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  )..**.** Paramet
1b440 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
1b450 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
1b460 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
1b470 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
1b480 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
1b490 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
1b4a0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
1b4b0 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
1b4c0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
1b4d0 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
1b4e0 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
1b4f0 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
1b500 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
1b510 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
1b520 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
1b530 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
1b540 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
1b550 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
1b560 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
1b570 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
1b580 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
1b590 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
1b5a0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
1b5b0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
1b5c0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
1b5d0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
1b5e0 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
1b5f0 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
1b600 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
1b610 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
1b620 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
1b630 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
1b640 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
1b650 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
1b660 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
1b670 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
1b680 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
1b690 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
1b6a0 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 20   {.  Mem *pData 
1b6b0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1b6c0 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  p2];.  Mem *pKey
1b6d0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1b6e0 3e 70 33 5d 3b 0a 0a 20 20 69 36 34 20 69 4b 65  >p3];..  i64 iKe
1b6f0 79 3b 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65  y;   /* The inte
1b700 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
1b710 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1b720 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
1b730 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
1b740 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
1b750 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1b760 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1b770 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1b780 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1b790 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1b7a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1b7b0 75 72 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  ursor!=0 || pC->
1b7c0 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20  pseudoTable );. 
1b7d0 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
1b7e0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1b7f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1b800 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
1b810 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1b820 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52  >p2, pData);.  R
1b830 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1b840 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20  p->p3, pKey);.. 
1b850 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79   iKey = intToKey
1b860 28 70 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69  (pKey->u.i);.  i
1b870 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1b880 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
1b890 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
1b8a0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1b8b0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
1b8c0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  b->lastRowid = p
1b8d0 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  Key->u.i;.  if( 
1b8e0 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1b8f0 69 64 20 26 26 20 70 4b 65 79 2d 3e 75 2e 69 3e  id && pKey->u.i>
1b900 3d 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29  =pC->nextRowid )
1b910 7b 0a 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f  {.    pC->nextRo
1b920 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  widValid = 0;.  
1b930 7d 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  }.  if( pData->f
1b940 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1b950 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1b960 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1b970 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1b980 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1b990 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1b9a0 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1b9b0 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70  .  }.  if( pC->p
1b9c0 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1b9d0 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d    if( !pC->ephem
1b9e0 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1b9f0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1ba00 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61  ee(db, pC->pData
1ba10 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1ba20 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20  >iKey = iKey;.  
1ba30 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44    pC->nData = pD
1ba40 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  ata->n;.    if( 
1ba50 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d  pData->z==pData-
1ba60 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e  >zMalloc || pC->
1ba70 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1ba80 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44   ){.      pC->pD
1ba90 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a  ata = pData->z;.
1baa0 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65        if( !pC->e
1bab0 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1bac0 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61  ){.        pData
1bad0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
1bae0 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61  Dyn;.        pDa
1baf0 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ta->flags |= MEM
1bb00 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20  _Ephem;.        
1bb10 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pData->zMalloc =
1bb20 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1bb30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d  }else{.      pC-
1bb40 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33  >pData = sqlite3
1bb50 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74  Malloc( pC->nDat
1bb60 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28  a+2 );.      if(
1bb70 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f   !pC->pData ) go
1bb80 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1bb90 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74   memcpy(pC->pDat
1bba0 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d  a, pData->z, pC-
1bbb0 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70  >nData);.      p
1bbc0 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1bbd0 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  ta] = 0;.      p
1bbe0 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1bbf0 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d  ta+1] = 0;.    }
1bc00 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1bc10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1bc20 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20     int nZero;.  
1bc30 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1bc40 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1bc50 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1bc60 44 61 74 61 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d  Data->u.i;.    }
1bc70 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72  else{.      nZer
1bc80 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  o = 0;.    }.   
1bc90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1bca0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
1bcb0 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcd0 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
1bce0 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
1bcf0 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd10 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c    pOp->p5 & OPFL
1bd20 41 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a  AG_APPEND);.  }.
1bd30 20 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73    .  pC->rowidIs
1bd40 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1bd50 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1bd60 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1bd70 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1bd80 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
1bd90 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
1bda0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
1bdb0 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1bdc0 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
1bdd0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1bde0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1bdf0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1be00 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1be10 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1be20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1be30 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
1be40 20 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70    int op = ((pOp
1be50 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1be60 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1be70 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1be80 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1be90 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1bea0 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1beb0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1bec0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1bed0 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1bee0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1bef0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1bf00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bf10 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1bf20 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1bf30 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1bf40 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1bf50 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1bf60 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1bf70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1bf80 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1bf90 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1bfa0 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1bfb0 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1bfc0 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1bfd0 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1bfe0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1bff0 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1c000 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1c010 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1c020 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1c030 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1c040 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1c050 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1c060 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1c070 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1c080 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1c090 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1c0a0 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1c0b0 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1c0c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1c0d0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1c0e0 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1c0f0 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1c100 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1c110 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1c120 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1c130 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1c140 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1c150 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1c160 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1c170 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1c180 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1c190 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1c1a0 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1c1b0 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1c1c0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1c1d0 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1c1e0 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1c1f0 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1c200 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1c210 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1c220 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1c230 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1c240 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1c250 2d 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79  ->p1;.  i64 iKey
1c260 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1c270 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  pC;..  assert( i
1c280 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1c290 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1c2a0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1c2b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c2c0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1c2d0 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
1c2e0 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
1c2f0 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
1c300 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
1c310 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
1c320 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
1c330 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
1c340 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
1c350 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
1c360 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
1c370 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
1c380 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1c390 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
1c3a0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1c3b0 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
1c3c0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1c3d0 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
1c3e0 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
1c3f0 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
1c400 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
1c410 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
1c420 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
1c430 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1c440 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  (pC);.  if( rc )
1c450 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c460 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d  to_error;.  rc =
1c470 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
1c480 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
1c490 3b 0a 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69  ;.  pC->nextRowi
1c4a0 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  dValid = 0;.  pC
1c4b0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c4c0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
1c4d0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
1c4e0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
1c4f0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
1c500 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1c510 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
1c520 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
1c530 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  z ){.    const c
1c540 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61  har *zDb = db->a
1c550 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
1c560 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e;.    const cha
1c570 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70  r *zTbl = pOp->p
1c580 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  4.z;.    db->xUp
1c590 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1c5a0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
1c5b0 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c  ITE_DELETE, zDb,
1c5c0 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
1c5d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
1c5e0 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
1c5f0 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
1c600 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1c610 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
1c620 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1c630 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 50 31 20  : ResetCount P1 
1c640 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
1c650 70 63 6f 64 65 20 72 65 73 65 74 73 20 74 68 65  pcode resets the
1c660 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
1c670 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 74 6f 20  ange counter to 
1c680 30 2e 20 49 66 20 50 31 20 69 73 20 74 72 75 65  0. If P1 is true
1c690 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 76 61  ,.** then the va
1c6a0 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
1c6b0 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
1c6c0 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
1c6d0 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
1c6e0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
1c6f0 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
1c700 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
1c710 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
1c720 0a 2a 2a 20 62 65 66 6f 72 65 20 69 74 20 69 73  .** before it is
1c730 20 72 65 73 65 74 2e 20 54 68 69 73 20 69 73 20   reset. This is 
1c740 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
1c750 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
1c760 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
1c770 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   {.  if( pOp->p1
1c780 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1c790 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
1c7a0 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
1c7b0 20 7d 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20   }.  p->nChange 
1c7c0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1c7d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
1c7e0 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
1c7f0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
1c800 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
1c810 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61   complete row da
1c820 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ta for cursor P1
1c830 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1c840 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1c850 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1c860 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
1c870 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
1c880 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1c890 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1c8a0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1c8b0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1c8c0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1c8d0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1c8e0 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1c8f0 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1c900 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1c910 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1c920 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20  do-table..*/./* 
1c930 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
1c940 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1c950 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1c960 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
1c970 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
1c980 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1c990 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
1c9a0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
1c9b0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
1c9c0 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
1c9d0 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
1c9e0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
1c9f0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
1ca00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1ca10 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
1ca20 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
1ca30 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
1ca40 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
1ca50 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
1ca60 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
1ca70 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
1ca80 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
1ca90 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
1caa0 6f 77 44 61 74 61 3a 20 7b 0a 20 20 69 6e 74 20  owData: {.  int 
1cab0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1cac0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1cad0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1cae0 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f  ;.  u32 n;..  pO
1caf0 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
1cb00 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f  p->p2];..  /* No
1cb10 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
1cb20 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
1cb30 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
1cb40 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
1cb50 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
1cb60 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1cb70 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1cb80 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
1cb90 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1cba0 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
1cbb0 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
1cbc0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
1cbd0 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
1cbe0 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
1cbf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
1cc00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1cc10 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
1cc20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1cc30 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29  pseudoTable==0 )
1cc40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1cc50 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1cc60 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1cc70 73 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  sor;.  rc = sqli
1cc80 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
1cc90 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
1cca0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1ccb0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
1ccc0 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
1ccd0 7b 0a 20 20 20 20 69 36 34 20 6e 36 34 3b 0a 20  {.    i64 n64;. 
1cce0 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
1ccf0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 73  isTable );.    s
1cd00 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
1cd10 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
1cd20 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
1cd30 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
1cd40 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
1cd50 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
1cd60 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
1cd70 3d 20 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  = n64;.  }else{.
1cd80 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1cd90 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
1cda0 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 28 69 6e  &n);.    if( (in
1cdb0 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  t)n>db->aLimit[S
1cdc0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1cdd0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
1cde0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
1cdf0 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
1ce00 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
1ce10 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20  ut, n, 0) ){.   
1ce20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1ce30 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
1ce40 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1ce50 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
1ce60 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49  );.  if( pC->isI
1ce70 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d  ndex ){.    rc =
1ce80 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1ce90 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
1cea0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
1ceb0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1cec0 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
1ced0 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
1cee0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
1cef0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
1cf00 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
1cf10 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
1cf20 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
1cf30 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
1cf40 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
1cf50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1cf60 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  : Rowid P1 P2 * 
1cf70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
1cf80 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
1cf90 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
1cfa0 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
1cfb0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
1cfc0 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
1cfd0 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
1cfe0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
1cff0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
1d000 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1d010 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
1d020 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1d030 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d040 20 69 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72   i64 v;..  asser
1d050 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1d060 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1d070 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1d080 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d090 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d0a0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1d0b0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  (pC);.  if( rc )
1d0c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d0d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
1d0e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d0f0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
1d100 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c  lastRowid;.  }el
1d110 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64  se if( pC->pseud
1d120 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20  oTable ){.    v 
1d130 3d 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69  = keyToInt(pC->i
1d140 4b 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Key);.  }else if
1d150 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
1d160 0a 20 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68  .    /* Leave th
1d170 65 20 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61  e rowid set to a
1d180 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65   NULL */.    bre
1d190 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ak;.  }else{.   
1d1a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1d1b0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
1d1c0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
1d1d0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
1d1e0 26 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79  &v);.    v = key
1d1f0 54 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20  ToInt(v);.  }.  
1d200 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
1d210 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1d220 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
1d230 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d240 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
1d250 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1d260 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
1d270 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
1d280 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
1d290 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
1d2a0 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
1d2b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
1d2c0 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
1d2d0 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
1d2e0 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
1d2f0 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
1d300 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1d310 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
1d320 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1d330 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1d340 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d350 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1d360 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d370 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d380 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
1d390 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28  Valid = 0;.  if(
1d3a0 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
1d3b0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1d3c0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
1d3d0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
1d3e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d3f0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
1d400 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
1d410 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
1d420 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
1d430 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
1d440 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
1d450 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
1d460 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
1d470 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1d480 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
1d490 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1d4a0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
1d4b0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
1d4c0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1d4d0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
1d4e0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
1d4f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
1d500 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
1d510 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
1d520 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
1d530 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1d540 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
1d550 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
1d560 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1d570 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d580 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1d590 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1d5a0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1d5b0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1d5c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d5d0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1d5e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
1d5f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1d600 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
1d610 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
1d620 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1d630 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
1d640 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65 73  C->nullRow = res
1d650 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1d660 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1d670 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1d680 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
1d690 66 28 20 72 65 73 20 26 26 20 70 4f 70 2d 3e 70  f( res && pOp->p
1d6a0 32 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  2>0 ){.    pc = 
1d6b0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1d6c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1d6d0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
1d6e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1d6f0 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
1d700 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
1d710 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
1d720 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
1d730 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
1d740 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
1d750 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
1d760 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
1d770 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
1d780 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
1d790 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
1d7a0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
1d7b0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
1d7c0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
1d7d0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
1d7e0 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
1d7f0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
1d800 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
1d810 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
1d820 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
1d830 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
1d840 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
1d850 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
1d860 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
1d870 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
1d880 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
1d890 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
1d8a0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
1d8b0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
1d8c0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
1d8d0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
1d8e0 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
1d8f0 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
1d900 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
1d910 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1d920 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
1d930 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
1d940 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
1d950 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
1d960 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
1d970 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b  STATUS_SORT-1]++
1d980 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
1d990 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
1d9a0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
1d9b0 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
1d9c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
1d9d0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
1d9e0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
1d9f0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
1da00 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
1da10 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
1da20 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
1da30 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1da40 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1da50 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1da60 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1da70 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1da80 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1da90 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1daa0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1dab0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1dac0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1dad0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1dae0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1daf0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1db00 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
1db10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
1db20 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1db30 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
1db40 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1db50 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1db60 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  s;..  assert( i>
1db70 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1db80 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1db90 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1dba0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1dbb0 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e  f( (pCrsr = pC->
1dbc0 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20  pCursor)!=0 ){. 
1dbd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1dbe0 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
1dbf0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1dc00 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30  atFirst = res==0
1dc10 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1dc20 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1dc30 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1dc40 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1dc50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
1dc60 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d  s = 1;.  }.  pC-
1dc70 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65 73 3b 0a  >nullRow = res;.
1dc80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1dc90 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
1dca0 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
1dcb0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
1dcc0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1dcd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1dce0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
1dcf0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
1dd00 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
1dd10 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1dd20 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
1dd30 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
1dd40 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
1dd50 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
1dd60 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
1dd70 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
1dd80 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1dd90 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1dda0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
1ddb0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
1ddc0 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
1ddd0 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
1dde0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1ddf0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
1de00 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
1de10 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
1de20 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
1de30 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
1de40 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
1de50 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
1de60 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1de70 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
1de80 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1de90 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
1dea0 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
1deb0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
1dec0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
1ded0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
1dee0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
1def0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
1df00 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1df10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1df20 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
1df30 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
1df40 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
1df50 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
1df60 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1df70 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
1df80 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
1df90 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1dfa0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1dfb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
1dfc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
1dfd0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
1dfe0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
1dff0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
1e000 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1e010 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1e020 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
1e030 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
1e040 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e050 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e060 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1e070 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e080 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
1e090 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
1e0a0 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
1e0b0 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
1e0c0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1e0d0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1e0e0 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rsr );.  res = 1
1e0f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e100 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1e110 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
1e120 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
1e130 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
1e140 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
1e150 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1e180 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
1e190 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1e1a0 77 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63  w = res;.  pC->c
1e1b0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1e1c0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1e1d0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  res==0 ){.    pc
1e1e0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e1f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
1e200 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f  ) p->aCounter[pO
1e210 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64  p->p5-1]++;.#ifd
1e220 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1e230 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
1e240 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1e250 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69  f.  }.  pC->rowi
1e260 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e270 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e280 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
1e290 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1e2a0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
1e2b0 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20  lds a SQL index 
1e2c0 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
1e2d0 68 65 0a 2a 2a 20 4d 61 6b 65 49 64 78 52 65 63  he.** MakeIdxRec
1e2e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
1e2f0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
1e300 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
1e310 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
1e320 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
1e330 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
1e340 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
1e350 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
1e360 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
1e370 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
1e380 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
1e390 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1e3a0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
1e3b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1e3c0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
1e3d0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
1e3e0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
1e3f0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
1e400 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
1e410 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
1e420 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
1e430 2a 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69  * in2 */.  int i
1e440 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64   = pOp->p1;.  Vd
1e450 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e460 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e470 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1e480 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1e490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1e4a0 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1e4b0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
1e4c0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1e4d0 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
1e4e0 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
1e4f0 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
1e500 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
1e510 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1e520 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
1e530 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
1e540 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e550 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  _OK ){.      int
1e560 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
1e570 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e580 72 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e  r *zKey = pIn2->
1e590 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
1e5a0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
1e5b0 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
1e5c0 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
1e5d0 70 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20 61 73  p->p3);.      as
1e5e0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
1e5f0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1e600 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
1e610 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e620 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
1e630 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e640 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
1e650 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1e660 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
1e670 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
1e680 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
1e690 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
1e6a0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e6b0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
1e6c0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
1e6d0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
1e6e0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
1e6f0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
1e700 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
1e710 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
1e720 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
1e730 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1e740 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73  sor *pCrsr;.  as
1e750 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
1e760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e770 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
1e780 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
1e790 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em );.  assert( 
1e7a0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1e7b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1e7c0 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1e7d0 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
1e7e0 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
1e7f0 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
1e800 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
1e810 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  s;.    UnpackedR
1e820 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 72 2e 70  ecord r;.    r.p
1e830 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1e840 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1e850 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  ield = pOp->p3;.
1e860 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
1e870 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70  .    r.aMem = &p
1e880 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
1e890 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e8a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e8b0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
1e8c0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1e8d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e8e0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
1e8f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e900 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
1e910 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rsr);.    }.    
1e920 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1e930 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1e940 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1e950 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e960 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  LE;.  }.  break;
1e970 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1e980 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
1e990 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1e9a0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1e9b0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
1e9c0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
1e9d0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
1e9e0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
1e9f0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
1ea00 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
1ea10 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
1ea20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
1ea30 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
1ea40 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
1ea50 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
1ea60 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
1ea70 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
1ea80 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 49  so: Rowid, MakeI
1ea90 64 78 52 65 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f  dxRec..*/.case O
1eaa0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
1eab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1eac0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1ead0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1eae0 70 31 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  p1;.  BtCursor *
1eaf0 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
1eb00 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1eb10 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1eb20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1eb30 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
1eb40 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  ]!=0 );.  if( (p
1eb50 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e  Crsr = (pC = p->
1eb60 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
1eb70 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 36  or)!=0 ){.    i6
1eb80 34 20 72 6f 77 69 64 3b 0a 0a 20 20 20 20 61 73  4 rowid;..    as
1eb90 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
1eba0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1ebb0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1ebc0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
1ebd0 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
1ebe0 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  w ){.      rc = 
1ebf0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
1ec00 77 69 64 28 70 43 72 73 72 2c 20 26 72 6f 77 69  wid(pCrsr, &rowi
1ec10 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  d);.      if( rc
1ec20 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1ec30 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1ec40 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ec50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 4d 65        }.      Me
1ec60 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1ec70 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
1ec80 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
1ec90 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  owid;.    }.  }.
1eca0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ecb0 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
1ecc0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
1ecd0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
1ece0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
1ecf0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
1ed00 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1ed10 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
1ed20 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20  mits the ROWID. 
1ed30 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
1ed40 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
1ed50 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
1ed60 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
1ed70 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
1ed80 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57  ignoring the ROW
1ed90 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
1eda0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
1edb0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
1edc0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1edd0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1ede0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
1edf0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
1ee00 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
1ee10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1ee20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
1ee30 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
1ee40 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20  n-zero then the 
1ee50 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63  key value is inc
1ee60 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73  reased by an eps
1ee70 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74  ilon .** prior t
1ee80 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
1ee90 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65  .  This make the
1eea0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
1eeb0 65 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a  e IdxGT except.*
1eec0 2a 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65  * that if the ke
1eed0 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  y from register 
1eee0 50 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  P3 is a prefix o
1eef0 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65  f the key in the
1ef00 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20   cursor,.** the 
1ef10 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20  result is false 
1ef20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64  whereas it would
1ef30 20 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64   be true with Id
1ef40 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  xGT..*/./* Opcod
1ef50 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
1ef60 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65  3 * P5.**.** The
1ef70 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
1ef80 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
1ef90 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
1efa0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
1efb0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
1efc0 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
1efd0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
1efe0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
1eff0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
1f000 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
1f010 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
1f020 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
1f030 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
1f040 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
1f050 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
1f060 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1f070 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
1f080 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
1f090 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
1f0a0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1f0b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1f0c0 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
1f0d0 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
1f0e0 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
1f0f0 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
1f100 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65  prior .** to the
1f110 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
1f120 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63  is makes the opc
1f130 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
1f140 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  xLE..*/.case OP_
1f150 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
1f160 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f170 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b  case OP_IdxGE: {
1f180 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f190 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 3d   in3 */.  int i=
1f1a0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
1f1b0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1f1c0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1f1d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f1e0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1f1f0 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1f200 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
1f210 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20  i])->pCursor!=0 
1f220 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
1f230 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
1f240 72 64 20 72 3b 0a 20 20 20 20 61 73 73 65 72 74  rd r;.    assert
1f250 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1f260 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
1f270 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1f280 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
1f290 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1f2a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1f2b0 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b  NT32 );.    r.pK
1f2c0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1f2d0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1f2e0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1f2f0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
1f300 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
1f310 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
1f320 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
1f330 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20  IGNORE_ROWID;.  
1f340 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1f350 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1f360 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
1f370 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
1f380 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1f390 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p3];.    rc = s
1f3a0 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
1f3b0 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
1f3c0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
1f3d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
1f3e0 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
1f3f0 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
1f400 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
1f410 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1f420 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
1f430 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
1f440 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
1f450 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1f460 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
1f470 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1f480 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
1f490 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
1f4a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
1f4b0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
1f4c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1f4d0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
1f4e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
1f4f0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
1f500 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
1f510 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
1f520 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
1f530 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1f540 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
1f550 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
1f560 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
1f570 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
1f580 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
1f590 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
1f5a0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1f5b0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
1f5c0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
1f5d0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
1f5e0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
1f5f0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
1f600 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
1f610 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
1f620 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
1f630 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1f640 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
1f650 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
1f660 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
1f670 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
1f680 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
1f690 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
1f6a0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
1f6b0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
1f6c0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
1f6d0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
1f6e0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
1f6f0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
1f700 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
1f710 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
1f720 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
1f730 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
1f740 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
1f750 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
1f760 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
1f770 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
1f780 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
1f790 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
1f7a0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1f7b0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
1f7c0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
1f7d0 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
1f7e0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
1f7f0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1f800 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
1f810 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
1f820 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
1f830 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1f840 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
1f850 20 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66 6e    int iCnt;.#ifn
1f860 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f870 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56  VIRTUALTABLE.  V
1f880 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 43  dbe *pVdbe;.  iC
1f890 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56  nt = 0;.  for(pV
1f8a0 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70  dbe=db->pVdbe; p
1f8b0 56 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64 62  Vdbe; pVdbe=pVdb
1f8c0 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
1f8d0 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
1f8e0 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
1f8f0 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62  && pVdbe->inVtab
1f900 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62  Method<2 && pVdb
1f910 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  e->pc>=0 ){.    
1f920 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
1f930 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
1f940 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62   = db->activeVdb
1f950 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69  eCnt;.#endif.  i
1f960 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
1f970 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
1f980 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
1f990 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
1f9a0 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
1f9b0 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
1f9c0 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
1f9d0 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
1f9e0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
1f9f0 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
1fa00 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
1fa10 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
1fa20 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
1fa30 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
1fa40 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d   &iMoved);.    M
1fa50 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1fa60 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1fa70 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
1fa80 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51  oved;.#ifndef SQ
1fa90 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
1faa0 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d  CUUM.    if( rc=
1fab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d  =SQLITE_OK && iM
1fac0 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
1fad0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
1fae0 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69  Moved(&db->aDb[i
1faf0 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  Db], iMoved, pOp
1fb00 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  ->p1);.    }.#en
1fb10 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
1fb20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1fb30 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
1fb40 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
1fb50 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
1fb60 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
1fb70 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1fb80 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
1fb90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1fba0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
1fbb0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
1fbc0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
1fbd0 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
1fbe0 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
1fbf0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1fc00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
1fc10 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
1fc20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1fc30 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
1fc40 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
1fc50 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1fc60 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
1fc70 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
1fc80 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
1fc90 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
1fca0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
1fcb0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
1fcc0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
1fcd0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
1fce0 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
1fcf0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
1fd00 61 62 6c 65 20 72 65 66 65 72 65 64 20 74 6f 20  able refered to 
1fd10 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
1fd20 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
1fd30 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
1fd40 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
1fd50 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
1fd60 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
1fd70 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
1fd80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
1fd90 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
1fda0 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
1fdb0 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
1fdc0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
1fdd0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
1fde0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1fdf0 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
1fe00 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
1fe10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
1fe20 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
1fe30 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
1fe40 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
1fe50 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
1fe60 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
1fe70 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
1fe80 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
1fe90 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
1fea0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
1feb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
1fec0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
1fed0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
1fee0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
1fef0 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
1ff00 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
1ff10 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1ff20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
1ff30 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
1ff40 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
1ff50 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d      p->aMem[pOp-
1ff60 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
1ff70 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
1ff80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ff90 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
1ffa0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
1ffb0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
1ffc0 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
1ffd0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1ffe0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
1fff0 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
20000 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
20010 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
20020 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
20030 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
20040 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
20050 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
20060 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
20070 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
20080 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
20090 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
200a0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
200b0 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
200c0 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
200d0 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
200e0 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
200f0 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
20100 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
20110 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
20120 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
20130 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
20140 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
20150 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
20160 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
20170 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
20180 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
20190 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
201a0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
201b0 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
201c0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
201d0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
201e0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
201f0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
20200 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
20210 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
20220 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
20230 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
20240 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
20250 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
20260 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
20270 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
20280 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
20290 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
202a0 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
202b0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
202c0 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
202d0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
202e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
202f0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
20300 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
20310 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
20320 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
20330 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20340 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
20350 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
20360 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
20370 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
20380 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
20390 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
203a0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
203b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
203c0 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
203d0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
203e0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
203f0 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
20400 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41  = BTREE_LEAFDATA
20410 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20  |BTREE_INTKEY;. 
20420 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
20430 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s = BTREE_ZERODA
20440 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  TA;.  }.  rc = s
20450 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
20460 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
20470 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
20480 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20490 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  _OK ){.    pOut-
204a0 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 20  >u.i = pgno;.   
204b0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
204c0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
204d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
204e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
204f0 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50  Schema P1 P2 * P
20500 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
20510 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
20520 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
20530 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
20540 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
20550 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
20560 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
20570 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22  P4.  P2 is the "
20580 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41  force" flag.   A
20590 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20  lways do.** the 
205a0 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73  parsing if P2 is
205b0 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73   true.  If P2 is
205c0 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69   false, then thi
205d0 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a  s routine is a.*
205e0 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73  * no-op if the s
205f0 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72  chema is not cur
20600 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20  rently loaded.  
20610 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
20620 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73  if P2.** is fals
20630 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  e, the SQLITE_MA
20640 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e  STER table is on
20650 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65  ly parsed if the
20660 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20   rest of the.** 
20670 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64  schema is alread
20680 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68  y loaded into th
20690 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a  e symbol table..
206a0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
206b0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
206c0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
206d0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
206e0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
206f0 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
20700 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
20710 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
20720 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
20730 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
20740 65 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ema: {.  char *z
20750 53 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d  Sql;.  int iDb =
20760 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73   pOp->p1;.  cons
20770 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
20780 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
20790 44 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28  Data;..  assert(
207a0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
207b0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20  b->nDb );.  if( 
207c0 21 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62 48  !pOp->p2 && !DbH
207d0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
207e0 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
207f0 64 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65 61  ded) ){.    brea
20800 6b 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72  k;.  }.  zMaster
20810 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
20820 69 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74 61  iDb);.  initData
20830 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74  .db = db;.  init
20840 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
20850 70 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70  p1;.  initData.p
20860 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
20870 72 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20  rrMsg;.  zSql = 
20880 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
20890 62 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20  b,.     "SELECT 
208a0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
208b0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
208c0 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20   WHERE %s",.    
208d0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
208e0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
208f0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20  p->p4.z);.  if( 
20900 7a 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  zSql==0 ) goto n
20910 6f 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73  o_mem;.  (void)s
20920 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
20930 64 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  db);.  assert( d
20940 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
20950 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75  );.  db->init.bu
20960 73 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44 61  sy = 1;.  initDa
20970 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
20980 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62  K;.  assert( !db
20990 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
209a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
209b0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
209c0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
209d0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
209e0 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
209f0 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
20a00 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73 71  nitData.rc;.  sq
20a10 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
20a20 7a 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69  zSql);.  db->ini
20a30 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28 76  t.busy = 0;.  (v
20a40 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
20a50 79 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  yOn(db);.  if( r
20a60 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
20a70 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
20a80 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
20a90 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
20aa0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
20ab0 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69  NALYZE) && !defi
20ac0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20ad0 50 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64  PARSER)./* Opcod
20ae0 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
20af0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
20b00 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
20b10 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
20b20 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
20b30 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
20b40 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
20b50 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
20b60 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
20b70 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
20b80 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
20b90 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
20ba0 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
20bb0 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
20bc0 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
20bd0 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
20be0 73 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d  s: {.  int iDb =
20bf0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
20c00 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
20c10 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  b<db->nDb );.  r
20c20 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
20c30 73 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62 29  sisLoad(db, iDb)
20c40 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
20c50 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
20c60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
20c70 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e  ALYZE) && !defin
20c80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
20c90 41 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f  ARSER)  */../* O
20ca0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
20cb0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
20cc0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
20cd0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
20ce0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
20cf0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
20d00 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
20d10 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
20d20 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
20d30 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
20d40 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
20d50 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
20d60 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
20d70 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
20d80 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
20d90 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
20da0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
20db0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
20dc0 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
20dd0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
20de0 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
20df0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
20e00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20e10 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
20e20 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
20e30 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
20e40 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
20e50 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
20e60 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
20e70 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
20e80 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
20e90 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
20ea0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
20eb0 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
20ec0 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
20ed0 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
20ee0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
20ef0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
20f00 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
20f10 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
20f20 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
20f30 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
20f40 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
20f50 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
20f60 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
20f70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
20f80 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
20f90 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
20fa0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
20fb0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
20fc0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
20fd0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
20fe0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
20ff0 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
21000 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
21010 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
21020 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
21030 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
21040 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
21050 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
21060 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
21070 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
21080 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
21090 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
210a0 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
210b0 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
210c0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
210d0 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
210e0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
210f0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
21100 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
21110 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
21120 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
21130 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
21140 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
21150 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
21160 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
21170 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
21180 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
21190 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
211a0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
211b0 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
211c0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
211d0 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
211e0 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
211f0 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
21200 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
21210 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
21220 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
21230 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
21240 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
21250 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
21260 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
21270 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
21280 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
21290 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
212a0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
212b0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
212c0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
212d0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
212e0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
212f0 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
21300 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
21310 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
21320 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
21330 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
21340 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
21350 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
21360 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
21370 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
21380 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
21390 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
213a0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
213b0 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
213c0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
213d0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
213e0 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
213f0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
21400 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
21410 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
21420 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
21430 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
21440 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
21450 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
21460 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
21470 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
21480 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
21490 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
214a0 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
214b0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
214c0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
214d0 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
214e0 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
214f0 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
21500 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
21510 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
21520 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21530 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
21540 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
21550 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
21560 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
21570 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
21580 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
21590 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
215a0 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
215b0 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52  ining */.  .  nR
215c0 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
215d0 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
215e0 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
215f0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
21600 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
21610 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
21620 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
21630 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
21640 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
21650 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
21660 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  Mem );.  pnErr =
21670 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
21680 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
21690 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
216a0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
216b0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
216c0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
216d0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
216e0 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
216f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
21700 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
21710 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
21720 5b 6a 5d 20 3d 20 73 71 6c 69 74 65 33 56 64 62  [j] = sqlite3Vdb
21730 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
21740 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
21750 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
21760 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
21770 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
21780 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
21790 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  (1<<pOp->p5))!=0
217a0 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
217b0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
217c0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
217d0 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
217e0 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 20 20 20 20 20 20 70 6e 45 72 72 2d            pnErr-
21810 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
21820 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
21830 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
21840 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
21850 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
21860 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
21870 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
21880 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
21890 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
218a0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
218b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
218c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
218d0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
218e0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
218f0 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
21900 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
21910 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
21920 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
21930 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
21940 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
21950 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
21960 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
21970 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
21980 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
21990 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
219a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
219b0 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
219c0 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
219d0 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
219e0 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
219f0 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
21a00 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
21a10 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
21a20 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
21a30 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
21a40 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
21a50 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  {       /* in2 *
21a60 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20  /.  Mem *pIdx;. 
21a70 20 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73   Mem *pVal;.  as
21a80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
21a90 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
21aa0 4d 65 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20  Mem );.  pIdx = 
21ab0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
21ac0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
21ad0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
21ae0 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
21af0 70 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pVal = &p->aMem[
21b00 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
21b10 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73  rt( (pVal->flags
21b20 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
21b30 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66  ;.  if( (pIdx->f
21b40 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
21b50 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
21b60 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
21b70 77 53 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20  wSet(pIdx);.    
21b80 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73  if( (pIdx->flags
21b90 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
21ba0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
21bb0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
21bc0 77 53 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d  wSetInsert(pIdx-
21bd0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c  >u.pRowSet, pVal
21be0 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
21bf0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
21c00 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
21c10 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74  P3 * *.**.** Ext
21c20 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
21c30 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
21c40 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
21c50 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
21c60 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
21c70 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
21c80 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
21c90 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
21ca0 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
21cb0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
21cc0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
21cd0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
21ce0 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
21cf0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74      /* jump, out
21d00 33 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78  3 */.  Mem *pIdx
21d10 3b 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61  ;.  i64 val;.  a
21d20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
21d30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
21d40 6e 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f  nMem );.  CHECK_
21d50 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
21d60 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIdx = &p->aMem
21d70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
21d80 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20   (pIdx->flags & 
21d90 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
21da0 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
21db0 53 65 74 4e 65 78 74 28 70 49 64 78 2d 3e 75 2e  SetNext(pIdx->u.
21dc0 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
21dd0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
21de0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
21df0 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
21e00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
21e10 74 4e 75 6c 6c 28 70 49 64 78 29 3b 0a 20 20 20  tNull(pIdx);.   
21e20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
21e30 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
21e40 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
21e50 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
21e60 6e 64 65 78 20 2a 2f 0a 20 20 20 20 61 73 73 65  ndex */.    asse
21e70 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
21e80 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
21e90 6d 20 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20  m );.    pOut = 
21ea0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
21eb0 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ];.    sqlite3Vd
21ec0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
21ed0 75 74 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  ut, val);.  }.  
21ee0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
21ef0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
21f00 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65  RIGGER./* Opcode
21f10 3a 20 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20  : ContextPush * 
21f20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20  * * .**.** Save 
21f30 74 68 65 20 63 75 72 72 65 6e 74 20 56 64 62 65  the current Vdbe
21f40 20 63 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68   context such th
21f50 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
21f60 74 6f 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65  tored by a Conte
21f70 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e  xtPop.** opcode.
21f80 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f   The context sto
21f90 72 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73  res the last ins
21fa0 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20  ert row id, the 
21fb0 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
21fc0 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20  hange.** count, 
21fd0 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  and the current 
21fe0 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65  statement change
21ff0 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20   count..*/.case 
22000 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20  OP_ContextPush: 
22010 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 2d 3e 63  {.  int i = p->c
22020 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b  ontextStackTop++
22030 3b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f  ;.  Context *pCo
22040 6e 74 65 78 74 3b 0a 0a 20 20 61 73 73 65 72 74  ntext;..  assert
22050 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46  ( i>=0 );.  /* F
22060 49 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75  IX ME: This shou
22070 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20  ld be allocated 
22080 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 76  as part of the v
22090 64 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  dbe at compile-t
220a0 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d  ime */.  if( i>=
220b0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44  p->contextStackD
220c0 65 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63  epth ){.    p->c
220d0 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68  ontextStackDepth
220e0 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63   = i+1;.    p->c
220f0 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71  ontextStack = sq
22100 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
22110 46 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74  Free(db, p->cont
22120 65 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20  extStack,.      
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65      sizeof(Conte
22160 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20  xt)*(i+1));.    
22170 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  if( p->contextSt
22180 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  ack==0 ) goto no
22190 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e  _mem;.  }.  pCon
221a0 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65  text = &p->conte
221b0 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43  xtStack[i];.  pC
221c0 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69  ontext->lastRowi
221d0 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
221e0 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  d;.  pContext->n
221f0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
22200 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nge;.  break;.}.
22210 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74  ./* Opcode: Cont
22220 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a  extPop * * * .**
22230 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20  .** Restore the 
22240 56 64 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20  Vdbe context to 
22250 74 68 65 20 73 74 61 74 65 20 69 74 20 77 61 73  the state it was
22260 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74   in when context
22270 50 75 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a  Push was last.**
22280 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20 63   executed. The c
22290 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74 68  ontext stores th
222a0 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  e last insert ro
222b0 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73  w id, the last s
222c0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e  tatement.** chan
222d0 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68  ge count, and th
222e0 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
222f0 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ent change count
22300 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
22310 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e  textPop: {.  Con
22320 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 20 3d  text *pContext =
22330 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63   &p->contextStac
22340 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74  k[--p->contextSt
22350 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72  ackTop];.  asser
22360 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  t( p->contextSta
22370 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62  ckTop>=0 );.  db
22380 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 43  ->lastRowid = pC
22390 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69  ontext->lastRowi
223a0 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  d;.  p->nChange 
223b0 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61  = pContext->nCha
223c0 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nge;.  break;.}.
223d0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
223e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
223f0 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
22400 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
22410 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
22420 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
22430 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
22440 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
22450 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
22460 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 69  the maximum of i
22470 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
22480 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
22490 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
224a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
224b0 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
224c0 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
224d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
224e0 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
224f0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
22500 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
22510 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
22520 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  in2 */.  sqlite3
22530 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
22540 79 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  y(pIn1);.  sqlit
22550 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
22560 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
22570 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
22580 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
22590 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
225a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
225b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
225c0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
225d0 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
225e0 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
225f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
22600 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
22610 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
22620 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
22630 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
22640 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
22650 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
22660 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
22670 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
22680 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22690 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
226a0 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
226b0 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
226c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
226d0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
226e0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73  mp, in1 */.  ass
226f0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
22700 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
22710 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
22720 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
22730 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
22740 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22750 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a  e: IfNeg P1 P2 *
22760 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
22770 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
22780 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
22790 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
227a0 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
227b0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
227c0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
227d0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
227e0 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
227f0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
22800 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
22810 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
22820 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
22830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
22840 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
22850 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61  jump, in1 */.  a
22860 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
22870 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
22880 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
22890 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
228a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
228b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
228c0 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50  ode: IfZero P1 P
228d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
228e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
228f0 67 69 73 74 65 72 20 50 31 20 69 73 20 65 78 61  gister P1 is exa
22900 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20  ctly 0, jump to 
22910 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
22920 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
22930 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
22940 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
22950 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
22960 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22970 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
22980 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
22990 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
229a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72  */.case OP_IfZer
229b0 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
229c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73  ump, in1 */.  as
229d0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
229e0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
229f0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
22a00 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
22a10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
22a20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22a30 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
22a40 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
22a50 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
22a60 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
22a70 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
22a80 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
22a90 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
22aa0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
22ab0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
22ac0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
22ad0 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
22ae0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
22af0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
22b00 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
22b10 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
22b20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
22b30 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
22b40 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
22b50 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
22b60 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
22b70 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  {.  int n = pOp-
22b80 3e 70 35 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  >p5;.  int i;.  
22b90 4d 65 6d 20 2a 70 4d 65 6d 2c 20 2a 70 52 65 63  Mem *pMem, *pRec
22ba0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
22bb0 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
22bc0 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
22bd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d  ;..  assert( n>=
22be0 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70  0 );.  pRec = &p
22bf0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
22c00 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
22c10 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
22c20 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
22c30 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
22c40 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
22c50 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
22c60 63 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65  c;.    storeType
22c70 49 6e 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f 64  Info(pRec, encod
22c80 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  ing);.  }.  ctx.
22c90 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
22ca0 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
22cb0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
22cc0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
22cd0 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70  ;.  ctx.pMem = p
22ce0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
22cf0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
22d00 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
22d10 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
22d20 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
22d30 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
22d40 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
22d50 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
22d60 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
22d70 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
22d80 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28  pColl = 0;.  if(
22d90 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67   ctx.pFunc->flag
22da0 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
22db0 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
22dc0 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
22dd0 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
22de0 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
22df0 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
22e00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
22e10 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
22e20 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
22e30 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
22e40 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
22e50 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
22e60 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
22e70 56 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e  Val);.  if( ctx.
22e80 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
22e90 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
22ea0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
22eb0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
22ec0 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
22ed0 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
22ee0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
22ef0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
22f00 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
22f10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22f20 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
22f30 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
22f40 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
22f50 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
22f60 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
22f70 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
22f80 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
22f90 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
22fa0 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
22fb0 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
22fc0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
22fd0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
22fe0 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
22ff0 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
23000 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
23010 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
23020 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
23030 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
23040 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
23050 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
23060 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
23070 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
23080 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
23090 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
230a0 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
230b0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
230c0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
230d0 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
230e0 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
230f0 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
23100 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
23110 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
23120 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
23130 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
23140 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
23150 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
23160 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
23170 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
23180 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  .  pMem = &p->aM
23190 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
231a0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
231b0 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
231c0 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
231d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
231e0 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
231f0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
23200 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  nc);.  if( rc==S
23210 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 7b 0a 20  QLITE_ERROR ){. 
23220 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
23230 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
23240 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
23250 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
23260 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
23270 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
23280 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
23290 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
232a0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
232b0 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
232c0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
232d0 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
232e0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
232f0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21  break;.}...#if !
23300 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23310 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
23320 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23330 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
23340 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
23350 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
23360 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
23370 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
23380 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
23390 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
233a0 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
233b0 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
233c0 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
233d0 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
233e0 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
233f0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23400 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66  P_Vacuum: {.  if
23410 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
23420 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
23430 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
23440 65 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e; .  rc = sqlit
23450 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
23460 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
23470 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
23480 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
23490 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
234a0 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  se;.  break;.}.#
234b0 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
234c0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
234d0 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
234e0 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
234f0 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
23500 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
23510 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
23520 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
23530 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
23540 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
23550 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
23560 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
23570 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
23580 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
23590 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
235a0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
235b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
235c0 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
235d0 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
235e0 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
235f0 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
23600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23610 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
23620 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
23630 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
23640 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
23650 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
23660 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
23670 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23680 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
23690 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
236a0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
236b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
236c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
236d0 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
236e0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
236f0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
23700 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
23710 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
23720 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
23730 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
23740 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
23750 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
23760 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
23770 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
23780 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
23790 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
237a0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
237b0 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
237c0 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
237d0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
237e0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
237f0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
23800 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
23810 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
23820 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
23830 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
23840 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
23850 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
23860 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
23870 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
23880 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
23890 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
238a0 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
238b0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
238c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
238d0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
238e0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
238f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
23900 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
23910 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
23920 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
23930 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
23940 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
23950 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
23960 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
23970 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ed. .**.** If P1
23980 20 69 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f   is  the index o
23990 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
239a0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
239b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
239c0 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
239d0 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
239e0 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
239f0 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
23a00 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
23a10 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
23a20 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
23a30 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
23a40 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
23a50 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
23a60 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
23a70 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
23a80 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
23a90 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
23aa0 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
23ab0 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
23ac0 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
23ad0 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
23ae0 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
23af0 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
23b00 20 7b 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f   {.  int p1 = pO
23b10 70 2d 3e 70 31 3b 20 0a 20 20 75 38 20 69 73 57  p->p1; .  u8 isW
23b20 72 69 74 65 4c 6f 63 6b 20 3d 20 70 4f 70 2d 3e  riteLock = pOp->
23b30 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p3;.  assert( p1
23b40 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
23b50 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
23b60 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
23b70 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  1<<p1))!=0 );.  
23b80 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
23b90 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
23ba0 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72 63  eLock==1 );.  rc
23bb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
23bc0 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
23bd0 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
23be0 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
23bf0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
23c00 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
23c10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
23c20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 73  pOp->p4.z;.    s
23c30 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
23c40 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
23c50 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
23c60 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
23c70 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   z);.  }.  break
23c80 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
23c90 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
23ca0 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
23cb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
23cc0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
23cd0 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
23ce0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
23cf0 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
23d00 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
23d10 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
23d20 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
23d30 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
23d40 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
23d50 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
23d60 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
23d70 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
23d80 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
23d90 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
23da0 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
23db0 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
23dc0 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
23dd0 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
23de0 69 73 2c 20 73 65 74 20 74 68 65 0a 2a 2a 20 65  is, set the.** e
23df0 72 72 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c  rror code to SQL
23e00 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
23e10 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
23e20 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
23e30 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34  *pVtab = pOp->p4
23e40 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
23e50 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
23e60 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  db, pVtab);.  if
23e70 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73  ( pVtab ){.    s
23e80 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
23e90 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
23ea0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
23eb0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
23ec0 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
23ed0 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  g = 0;.  }.  bre
23ee0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
23ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
23f00 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
23f10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23f20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
23f30 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
23f40 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
23f50 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
23f60 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
23f70 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
23f80 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
23f90 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
23fa0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
23fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
23fc0 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
23fd0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
23fe0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
23ff0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
24000 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
24010 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
24020 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24030 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
24040 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
24050 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
24060 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
24070 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
24080 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
24090 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
240a0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
240b0 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
240c0 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
240d0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
240e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
240f0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
24100 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
24110 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
24120 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
24130 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
24140 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
24150 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
24160 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
24170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24180 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
24190 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
241a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
241b0 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
241c0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
241d0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
241e0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
241f0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
24200 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
24210 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
24220 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
24230 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
24240 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
24250 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
24260 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
24270 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
24280 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
24290 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
242a0 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 30 3b 0a  rsor *pCur = 0;.
242b0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
242c0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
242d0 6f 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c 69 74  or = 0;..  sqlit
242e0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d  e3_vtab *pVtab =
242f0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
24300 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
24310 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c   *pModule = (sql
24320 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
24330 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
24340 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
24350 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28   pModule);.  if(
24360 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
24370 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
24380 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
24390 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
243a0 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
243b0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
243c0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
243d0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
243e0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
243f0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
24400 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
24410 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
24420 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
24430 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24440 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20  o_misuse;.  if( 
24450 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
24460 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
24470 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
24480 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
24490 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
244a0 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
244b0 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
244c0 74 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72  tialise vdbe cur
244d0 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
244e0 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
244f0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
24500 70 31 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31  p1, &pOp[-1], -1
24510 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
24520 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
24530 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
24540 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
24550 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65     pCur->pModule
24560 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
24570 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
24580 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24590 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
245a0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f  d = 1;.      pMo
245b0 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74  dule->xClose(pVt
245c0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
245d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
245e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
245f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24600 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
24610 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24620 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
24630 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
24640 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
24650 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
24660 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
24670 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
24680 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
24690 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
246a0 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
246b0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
246c0 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
246d0 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
246e0 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
246f0 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
24700 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
24710 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
24720 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
24730 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
24740 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
24750 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
24760 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
24770 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
24780 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
24790 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
247a0 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
247b0 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
247c0 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
247d0 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
247e0 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
247f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
24800 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
24810 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
24820 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
24830 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
24840 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
24850 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
24860 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
24870 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
24880 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
24890 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
248a0 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
248b0 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
248c0 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
248d0 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
248e0 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
248f0 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
24900 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
24910 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
24920 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
24930 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
24940 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
24950 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
24960 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
24970 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
24980 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
24990 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
249a0 20 4d 65 6d 20 2a 70 51 75 65 72 79 20 3d 20 26   Mem *pQuery = &
249b0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
249c0 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 20 3d  ;.  Mem *pArgc =
249d0 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 73   &pQuery[1];.  s
249e0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
249f0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
24a00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
24a10 2a 70 56 74 61 62 3b 0a 0a 20 20 56 64 62 65 43  *pVtab;..  VdbeC
24a20 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
24a30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24a40 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
24a50 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
24a60 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
24a70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
24a80 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
24a90 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
24aa0 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
24ab0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
24ac0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
24ad0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
24ae0 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
24af0 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
24b00 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
24b10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
24b20 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
24b30 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
24b40 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
24b50 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 70 41  t );.  nArg = pA
24b60 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
24b70 72 79 20 3d 20 70 51 75 65 72 79 2d 3e 75 2e 69  ry = pQuery->u.i
24b80 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
24b90 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
24ba0 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74  d */.  {.    int
24bb0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e   res = 0;.    in
24bc0 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a 61  t i;.    Mem **a
24bd0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
24be0 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
24bf0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
24c00 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
24c10 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
24c20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
24c30 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20  apArg[i], 0);.  
24c40 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c    }..    if( sql
24c50 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
24c60 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
24c70 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
24c80 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
24c90 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d  k(pVtab);.    p-
24ca0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
24cb0 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  1;.    rc = pMod
24cc0 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
24cd0 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
24ce0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
24cf0 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
24d00 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
24d10 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   0;.    sqlite3D
24d20 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
24d30 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
24d40 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
24d50 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
24d60 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
24d70 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 55      sqlite3VtabU
24d80 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29  nlock(db, pVtab)
24d90 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
24da0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
24db0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
24dc0 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72  xEof(pVtabCursor
24dd0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
24de0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
24df0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
24e00 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
24e10 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ..    if( res ){
24e20 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
24e30 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
24e40 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   }.  pCur->nullR
24e50 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ow = 0;..  break
24e60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
24e70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24e80 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
24e90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
24ea0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
24eb0 70 63 6f 64 65 3a 20 56 52 6f 77 69 64 20 50 31  pcode: VRowid P1
24ec0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
24ed0 53 74 6f 72 65 20 69 6e 74 6f 20 72 65 67 69 73  Store into regis
24ee0 74 65 72 20 50 32 20 20 74 68 65 20 72 6f 77 69  ter P2  the rowi
24ef0 64 20 6f 66 0a 2a 2a 20 74 68 65 20 76 69 72 74  d of.** the virt
24f00 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
24f10 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
24f20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a  pointing to..*/.
24f30 63 61 73 65 20 4f 50 5f 56 52 6f 77 69 64 3a 20  case OP_VRowid: 
24f40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
24f50 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24f60 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
24f70 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
24f80 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
24f90 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 73 71  e *pModule;.  sq
24fa0 6c 69 74 65 5f 69 6e 74 36 34 20 69 52 6f 77 3b  lite_int64 iRow;
24fb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24fc0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
24fd0 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 61 73 73 65  Op->p1];..  asse
24fe0 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
24ff0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
25000 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
25010 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
25020 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
25030 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
25040 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
25050 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
25060 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
25070 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 69 66  ->xRowid );.  if
25080 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
25090 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
250a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
250b0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
250c0 65 2d 3e 78 52 6f 77 69 64 28 70 43 75 72 2d 3e  e->xRowid(pCur->
250d0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 69 52  pVtabCursor, &iR
250e0 6f 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ow);.  sqlite3Db
250f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
25100 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
25110 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
25120 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
25130 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
25140 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
25150 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
25160 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
25170 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
25180 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
25190 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
251a0 69 52 6f 77 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  iRow;.  break;.}
251b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
251c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
251d0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
251e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
251f0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
25200 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50  de: VColumn P1 P
25210 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
25220 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
25230 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
25240 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
25250 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
25260 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
25270 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
25280 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
25290 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
252a0 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
252b0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
252c0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
252d0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
252e0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
252f0 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
25300 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
25310 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
25320 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
25330 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25340 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
25350 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
25360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
25370 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
25380 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
25390 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
253a0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p3];.  if( pCur
253b0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
253c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
253d0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
253e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
253f0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
25400 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
25410 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
25420 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
25430 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
25440 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
25450 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
25460 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
25470 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  xt));..  /* The 
25480 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
25490 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
254a0 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
254b0 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63   Move.  ** the c
254c0 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20  urrent contents 
254d0 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f  to sContext.s so
254e0 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
254f0 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a  r-function .  **
25500 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72   can use the alr
25510 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
25520 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
25530 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20   allocating a . 
25540 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a   ** new one..  *
25550 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
25560 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74  emMove(&sContext
25570 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65  .s, pDest);.  Me
25580 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43  mSetTypeFlag(&sC
25590 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75  ontext.s, MEM_Nu
255a0 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  ll);..  if( sqli
255b0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
255c0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
255d0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72  e_to_misuse;.  r
255e0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
255f0 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62  lumn(pCur->pVtab
25600 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78  Cursor, &sContex
25610 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
25620 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
25630 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
25640 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
25650 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
25660 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
25670 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68  0;..  /* Copy th
25680 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
25690 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  function to the 
256a0 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a  P3 register. We.
256b0 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67    ** do this reg
256c0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
256d0 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72  er or not an err
256e0 6f 72 20 6f 63 63 75 72 65 64 20 74 6f 20 65 6e  or occured to en
256f0 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79  sure any.  ** dy
25700 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e  namic allocation
25710 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28   in sContext.s (
25720 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73  a Mem struct) is
25730 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f    released..  */
25740 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
25750 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43  angeEncoding(&sC
25760 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69  ontext.s, encodi
25770 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ng);.  REGISTER_
25780 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
25790 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74 65 33  Dest);.  sqlite3
257a0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73  VdbeMemMove(pDes
257b0 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b  t, &sContext.s);
257c0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
257d0 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
257e0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
257f0 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
25800 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25810 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20  to_misuse;.  }. 
25820 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
25830 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
25840 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
25850 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
25860 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
25870 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25880 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
25890 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
258a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
258b0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
258c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
258d0 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
258e0 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
258f0 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
25900 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
25910 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
25920 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
25930 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
25940 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
25950 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
25960 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
25970 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
25980 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
25990 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
259a0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
259b0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
259c0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
259d0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
259e0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
259f0 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b  ;.  int res = 0;
25a00 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
25a10 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
25a20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25a30 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
25a40 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
25a50 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
25a60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
25a70 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
25a80 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
25a90 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
25aa0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
25ab0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
25ac0 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
25ad0 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
25ae0 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
25af0 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
25b00 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
25b10 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
25b20 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
25b30 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
25b40 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
25b50 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
25b60 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
25b70 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
25b80 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
25b90 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
25ba0 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
25bb0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
25bc0 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
25bd0 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
25be0 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
25bf0 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
25c00 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
25c10 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
25c20 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
25c30 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  or..  */.  if( s
25c40 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
25c50 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
25c60 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
25c70 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
25c80 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 69  k(pVtab);.  p->i
25c90 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
25ca0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
25cb0 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
25cc0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
25cd0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
25ce0 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
25cf0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
25d00 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
25d10 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
25d20 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
25d30 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  sg = 0;.  sqlite
25d40 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
25d50 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
25d60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
25d70 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
25d80 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
25d90 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
25da0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
25db0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
25dc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
25dd0 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72 65 73  use;..  if( !res
25de0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
25df0 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
25e00 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
25e10 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
25e20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25e30 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25e40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25e50 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
25e60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25e70 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
25e80 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
25e90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
25ea0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
25eb0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
25ec0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
25ed0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
25ee0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
25ef0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
25f00 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
25f10 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
25f20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
25f30 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
25f40 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
25f50 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
25f60 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
25f70 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
25f80 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
25f90 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70  tab *pVtab = pOp
25fa0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 4d 65  ->p4.pVtab;.  Me
25fb0 6d 20 2a 70 4e 61 6d 65 20 3d 20 26 70 2d 3e 61  m *pName = &p->a
25fc0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
25fd0 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
25fe0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
25ff0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
26000 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
26010 6d 65 29 3b 0a 0a 20 20 53 74 72 69 6e 67 69 66  me);..  Stringif
26020 79 28 70 4e 61 6d 65 2c 20 65 6e 63 6f 64 69 6e  y(pName, encodin
26030 67 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  g);..  if( sqlit
26040 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
26050 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26060 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71  _to_misuse;.  sq
26070 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56  lite3VtabLock(pV
26080 74 61 62 29 3b 0a 20 20 72 63 20 3d 20 70 56 74  tab);.  rc = pVt
26090 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
260a0 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
260b0 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  e->z);.  sqlite3
260c0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
260d0 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
260e0 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
260f0 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
26100 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73  zErrMsg = 0;.  s
26110 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26120 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  (db, pVtab);.  i
26130 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
26140 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
26150 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
26160 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  e;..  break;.}.#
26170 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
26180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26190 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
261a0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
261b0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
261c0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
261d0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
261e0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
261f0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
26200 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
26210 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
26220 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
26230 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
26240 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
26250 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
26260 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
26270 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
26280 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
26290 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
262a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
262b0 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
262c0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
262d0 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
262e0 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
262f0 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
26300 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
26310 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
26320 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
26330 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
26340 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
26350 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
26360 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
26370 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
26380 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
26390 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
263a0 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
263b0 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
263c0 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
263d0 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
263e0 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
263f0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
26400 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
26410 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
26420 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
26430 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
26440 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
26450 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
26460 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
26470 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
26480 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
26490 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
264a0 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
264b0 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
264c0 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
264d0 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
264e0 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
264f0 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
26500 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
26510 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
26520 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
26530 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
26540 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
26550 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
26560 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
26570 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
26580 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
26590 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
265a0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
265b0 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
265c0 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
265d0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61   inserted..*/.ca
265e0 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
265f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
26600 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34  *pVtab = pOp->p4
26610 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  .pVtab;.  sqlite
26620 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
26630 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
26640 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
26650 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
26660 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
26670 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26680 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20  e==P4_VTAB );.  
26690 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  if( pModule->xUp
266a0 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 73  date==0 ){.    s
266b0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
266c0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
266d0 20 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62 6c   "read-only tabl
266e0 65 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  e");.    rc = SQ
266f0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65  LITE_ERROR;.  }e
26700 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  lse{.    int i;.
26710 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34      sqlite_int64
26720 20 72 6f 77 69 64 3b 0a 20 20 20 20 4d 65 6d 20   rowid;.    Mem 
26730 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41  **apArg = p->apA
26740 72 67 3b 0a 20 20 20 20 4d 65 6d 20 2a 70 58 20  rg;.    Mem *pX 
26750 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
26760 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
26770 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
26780 20 20 20 20 20 20 73 74 6f 72 65 54 79 70 65 49        storeTypeI
26790 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20 20 20  nfo(pX, 0);.    
267a0 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
267b0 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
267c0 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
267d0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
267e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
267f0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
26800 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
26810 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63 20 3d  pVtab);.    rc =
26820 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
26830 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
26840 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
26850 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
26860 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
26870 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
26880 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
26890 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45  g;.    pVtab->zE
268a0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 73  rrMsg = 0;.    s
268b0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
268c0 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  (db, pVtab);.   
268d0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
268e0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
268f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
26900 75 73 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  use;.    if( pOp
26910 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53 51 4c 49  ->p1 && rc==SQLI
26920 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 61  TE_OK ){.      a
26930 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26  ssert( nArg>1 &&
26940 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70   apArg[0] && (ap
26950 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45  Arg[0]->flags&ME
26960 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20  M_Null) );.     
26970 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
26980 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
26990 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
269a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
269b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
269c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
269d0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
269e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
269f0 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
26a00 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
26a10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26a20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
26a30 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
26a40 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
26a50 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
26a60 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
26a70 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
26a80 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
26a90 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
26aa0 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
26ab0 20 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a 20   .  int nPage;. 
26ac0 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
26ad0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
26ae0 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  er(db->aDb[p1].p
26af0 42 74 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  Bt);..  rc = sql
26b00 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f 75  ite3PagerPagecou
26b10 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61 67  nt(pPager, &nPag
26b20 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  e);.  if( rc==SQ
26b30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70  LITE_OK ){.    p
26b40 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26b50 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
26b60 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d  u.i = nPage;.  }
26b70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
26b80 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
26b90 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
26ba0 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a   Opcode: Trace *
26bb0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
26bc0 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
26bd0 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
26be0 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
26bf0 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
26c00 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
26c10 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
26c20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
26c30 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
26c40 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ack..*/.case OP_
26c50 54 72 61 63 65 3a 20 7b 0a 20 20 69 66 28 20 70  Trace: {.  if( p
26c60 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
26c70 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20 29  if( db->xTrace )
26c80 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61  {.      db->xTra
26c90 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
26ca0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
26cb0 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
26cc0 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
26cd0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
26ce0 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
26cf0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
26d00 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51  3DebugPrintf("SQ
26d10 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20  L-trace: %s\n", 
26d20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
26d30 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
26d40 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a  TE_DEBUG */.  }.
26d50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26d60 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  f.../* Opcode: N
26d70 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
26d80 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
26d90 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
26da0 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
26db0 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
26dc0 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
26dd0 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
26de0 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
26df0 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
26e00 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
26e10 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
26e20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
26e30 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
26e40 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
26e50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26e60 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
26e70 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
26e80 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
26e90 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
26ea0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
26eb0 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
26ec0 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
26ed0 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
26ee0 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
26ef0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
26f00 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
26f10 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
26f20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
26f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
26f80 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
26f90 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
26fa0 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
26fb0 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
26fc0 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
26fd0 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
26fe0 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
26ff0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
27000 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
27010 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
27020 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
27030 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
27040 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
27050 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
27060 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
27070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
27090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
270a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
270b0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
270c0 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
270d0 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
270e0 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
270f0 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
27100 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
27110 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
27120 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
27130 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
27140 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
27150 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
27160 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
27170 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
27180 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
27190 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72  igPc, &p->aOp[or
271a0 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  igPc]);.#endif. 
271b0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
271c0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
271d0 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68  g code adds noth
271e0 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61  ing to the actua
271f0 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  l functionality.
27200 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72      ** of the pr
27210 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e  ogram.  It is on
27220 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74  ly here for test
27230 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
27240 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65  g..    ** On the
27250 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20   other hand, it 
27260 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79  does burn CPU cy
27270 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20  cles every time 
27280 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
27290 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f  he evaluator loo
272a0 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65  p.  So we can le
272b0 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20  ave it out when 
272c0 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  NDEBUG is define
272d0 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65  d..    */.#ifnde
272e0 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73  f NDEBUG.    ass
272f0 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70  ert( pc>=-1 && p
27300 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66  c<p->nOp );..#if
27310 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27320 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
27330 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
27340 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70  c!=0 ) fprintf(p
27350 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e  ->trace,"rc=%d\n
27360 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
27370 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50   opProperty & OP
27380 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
27390 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ASE ){.        r
273a0 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
273b0 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20  trace, pOp->p2, 
273c0 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pOut);.      }. 
273d0 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65       if( opPrope
273e0 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
273f0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
27400 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
27410 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ce, pOp->p3, pOu
27420 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
27430 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
27440 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
27450 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
27460 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
27470 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
27480 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
27490 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
274a0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
274b0 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
274c0 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
274d0 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
274e0 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
274f0 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
27500 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f  kind..  */.vdbe_
27510 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73  error_halt:.  as
27520 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d  sert( rc );.  p-
27530 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
27540 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
27550 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27560 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64  _IOERR_NOMEM ) d
27570 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
27580 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  = 1;.  rc = SQLI
27590 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20  TE_ERROR;..  /* 
275a0 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
275b0 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73   way out of this
275c0 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20   procedure.  We 
275d0 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c  have to.  ** rel
275e0 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73  ease the mutexes
275f0 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20   on btrees that 
27600 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74  were acquired at
27610 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a   the.  ** top. *
27620 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20  /.vdbe_return:. 
27630 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74   sqlite3BtreeMut
27640 65 78 41 72 72 61 79 4c 65 61 76 65 28 26 70 2d  exArrayLeave(&p-
27650 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  >aMutex);.  retu
27660 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
27670 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
27680 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
27690 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
276a0 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
276b0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
276c0 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
276d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
276e0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
276f0 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
27700 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
27710 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
27720 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
27730 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
27740 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
27750 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
27760 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
27770 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
27780 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
27790 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
277a0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
277b0 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
277c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
277d0 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
277e0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
277f0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
27800 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  or an SQLITE_MIS
27810 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a  USE error..  */.
27820 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
27830 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c 49  use:.  rc = SQLI
27840 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a 20  TE_MISUSE;.  /* 
27850 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 61  Fall thru into a
27860 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27870 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  r */..  /* Jump 
27880 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
27890 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
278a0 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
278b0 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
278c0 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
278d0 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
278e0 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
278f0 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
27900 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
27910 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
27920 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
27930 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
27940 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
27950 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
27960 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27970 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27980 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
27990 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
279a0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
279b0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
279c0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
279d0 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
279e0 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
279f0 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
27a00 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
27a10 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
27a20 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
27a30 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
27a40 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
27a50 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
27a60 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
27a70 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
27a80 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27a90 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
27aa0 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
27ab0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
27ac0 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.